jQuery .each()
mất một chức năng gọi lại và áp dụng nó vào mỗi phần tử trong đối tượng jQuery.
Hãy tưởng tượng một cái gì đó như thế này:
$('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'});
});
});
Bạn cũng có thể chỉ lưu trữ các kết quả và làm việc trên nó thay vì:
$('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'});
});
Tôi cũng xin đề nghị rằng thay vì mofiying CSS như thế bạn chỉ cần thêm một lớp vào li nhân bản của bạn như sau:
$(this).closest('li').clone().addClass("new-item").appendTo('#cart ul');
Sau đó, thiết lập một số kiểu như:
.new-item img, .new-item li { height: 40px; width: 40px; }
.new-item h5 { display: none }
Hmm .. ví dụ thứ 2 sẽ vẫn kích hoạt không đồng bộ và sẽ không hoạt động trong hầu hết các trường hợp khi chúng cần gọi lại * sau * appendTo – Trip
Tôi không chắc bạn hiểu điều gì có nghĩa là @Trip --- Tất cả điều đó mã ở trên là đồng bộ. Không có cuộc gọi không đồng bộ nào trong mã này. Ngay cả khi gọi lại bên trong mỗi vẫn còn đồng bộ, nó được gọi ngay lập tức. Sự khác biệt duy nhất trong cả hai ví dụ là việc đầu tiên tạo ra một phạm vi mới bên trong mỗi mà bạn có thể lưu trữ các biến cho mỗi phần tử được so khớp, nếu không chúng sẽ hoạt động giống nhau. – gnarf
Tôi đã sai! Cảm ơn :) – Trip