Jquery-выполнить обратный вызов после добавления

Я добавляю контент в список, используя:

  $('a.ui-icon-cart').click(function(){
         $(this).closest('li').clone().appendTo('#cart ul');
  });

Я хочу выполнить дополнительные функции для добавленного содержимого (изменить класс, применить анимацию и т. д.)

Как я могу выполнить обратный вызов этой функции, который позволит мне выполнять функции над добавленными данными?

4 ответов


jQuery .each() принимает функцию обратного вызова и применяет ее к каждому элементу в объекте jQuery.

представьте себе что-то вроде этого:

$('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'});
  });
});

вы также можете просто сохранить результат и работать на нем вместо:

$('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'});
});

Я бы также предложил вместо того, чтобы mofiying CSS, как это, вы просто добавляете класс к своему клонированному li, как это:

$(this).closest('li').clone().addClass("new-item").appendTo('#cart ul');

потом настройки некоторые стили, такие как:

.new-item img, .new-item li { height: 40px; width: 40px; }
.new-item h5 { display: none }

к сожалению, добавление обратных вызовов в операции dom-это не то, что можно сделать аккуратно с помощью javascript. По этой причине он не находится в библиотеке jQuery. Однако settimeout с таймером " 1ms " всегда помещает функцию в settimeout в нижней части стека вызовов. Это работает! Символ подчеркивания.библиотека js использует этот метод в _.отложить, что делает именно то, что вы хотите.

$('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);
});

вы можете просто продолжать цепочку дальнейших операций в точке с запятой.

$(this).closest('li').clone().appendTo('#cart ul').addClass('busy').fade('fast');

etc


в jquery вы можете использовать $ () сразу после добавления кода содержимого. Таким образом, вы можете быть уверены, что содержимое загружено и DOM готов перед выполнением любых задач над добавленным содержимым.

$(function(){
//code that needs to be executed when DOM is ready, after manipulation
});

$ () вызывает функцию, которая либо регистрирует обратный вызов DOM-ready (если ему передается функция), либо возвращает элементы из DOM (если ему передается строка или элемент селектора)

вы можете найти больше здесь
разница между $ и $() в в jQuery
http://api.jquery.com/ready/