I am appending content to a list using:
$('a.ui-icon-cart').click(function(){ $(this).closest('li').clone().appendTo('#cart ul'); });
I want to perform further functions to the appended content (change class, apply animations etc)
How can I perform a callback on this function that will allow me to perform functions on the appended data?
jQuery append() MethodThe append() method inserts specified content at the end of the selected elements. Tip: To insert content at the beginning of the selected elements, use the prepend() method.
jQuery insertAfter() MethodThe insertAfter() method inserts HTML elements after the selected elements. Tip: To insert HTML elements before the selected elements, use the insertBefore() method.
jQuery after() Method The after() method inserts specified content after the selected elements.
jQuery's .each()
takes a callback function and applies it to each element in the jQuery object.
Imagine something like this:
$('a.ui-icon-cart').click(function(){ $(this).closest('li').clone().appendTo('#cart ul').each(function() { $(this).find('h5').remove(); $(this).find('img').css({'height':'40px', 'width':'40px'}); $(this).find('li').css({'height':'60px', 'width':'40px'}); }); });
You could also just store the result and work on it instead:
$('a.ui-icon-cart').click(function(){ var $new = $(this).closest('li').clone().appendTo('#cart ul') $new.find('h5').remove(); $new.find('img').css({'height':'40px', 'width':'40px'}); $new.find('li').css({'height':'60px', 'width':'40px'}); });
I would also suggest that instead of mofiying the CSS like that you just add a class to your cloned li like this:
$(this).closest('li').clone().addClass("new-item").appendTo('#cart ul');
Then setup some styles like:
.new-item img, .new-item li { height: 40px; width: 40px; } .new-item h5 { display: none }
Unfortunatly adding callbacks to dom operations is not something that can be done in a neat fashion using javascript. For this reason it is not in the jQuery library. A settimeout with the timer "1ms" however always puts the function in the settimeout on the bottom of the call stack. This does work! The underscore.js library uses this technique in _.defer, which does exactly what you want.
$('a.ui-icon-cart').click(function(){ $(this).closest('li').clone().appendTo('#cart ul'); setTimeout(function() { // The LI is now appended to #cart UL and you can mess around with it. }, 1); });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With