Thursday, April 5, 2012

jQuery using append with effects


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?


Source: Tips4all

5 comments:

  1. 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: none;"> ... </div>


    Then you can chain effects to your append:

    $('#original_div').append('#new_div').show('slow');

    ReplyDelete
  2. The essence is this:


    You're calling 'append' on the parent
    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');

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

    ReplyDelete
  4. 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.

    ReplyDelete
  5. Another way when working with incoming data (like from an ajax call):

    var new_div = $(data).hide();
    $('#old_div').append(new_div);
    new_div.slideDown();

    ReplyDelete