Intereting Posts
Как добавить дополнительные фильтры в заголовок Datatables? Как написать функцию javascript для загрузки явного суперпоставленного слайда извлечение и замена (только для YouTube) Iframe src Изменение изображений с помощью JQuery (круговое движение) Создание локальной ссылки на ключ jQuery.data Заполнение модального контента с помощью PHP и AJAX? jQuery .split () после последней косой черты? выбрать все флажок работает только дважды Почему html () выполняет JavaScript, но innerHTML не работает? Сохраните содержимое div с локальным хранилищем и отобразите на другой странице как установить datasource в jqGrid Предположим, у меня есть список из 500 миниатюр, за которыми следует название. Как загрузить изображения по мере прокрутки пользователя? (JQuery) После обновления fancybox до 2.1 изображения получают значение по умолчанию 100px height Переменные не обновляются после завершения запроса AJAX Javascript для времени, оставшегося в тот же день?

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

Я добавляю содержимое в список, используя:

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

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

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

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 как то, вы просто добавляете class в свой клонированный 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. Однако установка с таймером «1 мс» всегда помещает функцию в настройку в нижней части стека вызовов. Это работает! Библиотека underscore.js использует эту технику в _.defer, которая делает именно то, что вы хотите.

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

так далее

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

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

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

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