.each()
de jQuery prend une fonction de rappel et l'applique à chaque élément de l'objet jQuery.
Imaginez quelque chose comme ceci:
$('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'});
});
});
Vous pouvez aussi simplement stocker le résultat et le travail sur elle à la place:
$('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'});
});
Je suggère également qu'au lieu de mofiying le CSS comme vous venez ajoutez une classe à votre li cloné comme ceci:
$(this).closest('li').clone().addClass("new-item").appendTo('#cart ul');
Ensuite, installez des styles comme:
.new-item img, .new-item li { height: 40px; width: 40px; }
.new-item h5 { display: none }
Hmm .. le 2ème exemple serait encore déclenché de manière asynchrone et ne fonctionnerait pas dans la plupart des cas quand ils avaient besoin du callback * après * l'appendTo – Trip
Je ne suis pas sûr de comprendre ce que signifie asynch @Trip --- Tout cela le code ci-dessus est synch. Il n'y a pas d'appels asynchrones dans ce code. Même le rappel à l'intérieur de chacun est toujours synchrone, il est appelé immédiatement. La seule différence dans l'un ou l'autre exemple est que le premier crée une nouvelle portée à l'intérieur de chacun que vous pouvez avoir pour stocker des variables pour chaque élément correspondant, sinon ils devraient fonctionner de manière identique. – gnarf
J'avais tort! Merci :) – Trip