views:

1592

answers:

4

How can I use .append() with effects like show('slow')

Having effects on append doesn't seem to work at all, and it give the same result as normal show(). No transitions, no animations.

How can I append one div to another, and have a slideDown or show('slow') effect on it?

+3  A: 

Set the appended div to be hidden initially through css display:hidden.

Steerpike
A: 

Something like:

$('#test').append('<div id="newdiv">Hello</div>').hide().show('slow');

should do it?

Edit: sorry, mistake in code and took Matt's suggestion on board too.

Mark B
Not sure if that would do what he wants, but if so, you'd chain the functions: `$('#divid').append('#newdiv').hide().show('slow')`.
Matt Ball
It does work; the #newdiv bit is wrong though and you're right, you can chain them. I've edited my answer now.
Mark B
+5  A: 

Having effects on append won't work because the content the browser displays is updated as soon as the div is appended. So, to combine Mark B's and Steerpike's answers:

Style the div you're appending as hidden before you actually append it. You can do it with inline or external CSS script, or just create the div as

<div id="new_div" style="display: hidden;"> ... </div>

Then you can chain effects to your append:

$('#original_div').append('#new_div').show('slow');
Matt Ball
Out of curiosity, why the downvote?
Matt Ball
was probably the inline style, adding a css class like "hidden" which equates to display: none is .. "classier" (baddoom tsh) ;)
danp
@danp: http://www.sadtrombone.com
Matt Ball
+4  A: 

The essence is this:

  1. You're calling 'append' on the parent
  2. but you want to call 'show' on the new child

This works for me:

var new_item = $('<p>hello</p>').hide();
parent.append(new_item);
new_item.show('normal');

or:

$('<p>hello</p>').hide().appendTo(parent).show('normal');
Derek Illchuk