Потеряны ли события в jQuery при удалении () элемента и добавлении () его в другом месте? - PullRequest
22 голосов
/ 18 февраля 2009

Что происходит в jQuery, когда вы удаляете () элемент и добавляете () его в другом месте?

Похоже, что события отцеплены - как будто вы просто вставляете свежий HTML (что, я думаю, и происходит). Но также возможно, что в моем коде есть ошибка - поэтому я просто хотел проверить это поведение, прежде чем продолжить.

Если это так, то есть ли какие-либо простые способы переназначить события только на эту часть HTML или другой способ перемещения элемента без потери события в первую очередь.

Ответы [ 3 ]

54 голосов
/ 15 марта 2012

Функция jQuery detach () такая же, как remove () , но сохраняет обработчики событий в возвращаемом объекте. Если вам нужно удалить предмет и поместить его в другое место со всем, что вы можете просто использовать.

var objectWithEvents = $('#old').detach();
$('#new').append(objectWithEvents);

Проверьте документы API здесь: http://api.jquery.com/detach/

29 голосов
/ 18 февраля 2009

Да, подход jQuery с remove() заключается в том, чтобы отменить привязку всего, что связано с собственным bind в jQuery (для предотвращения утечек памяти).

Однако, если вы просто хотите что-то переместить в DOM, вам не нужно сначала remove() делать это. * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * append * * * * * * * * * * * * * * * * * * * *1009* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Например, вставьте это в ваш firebug на этой странице:

$('li.wmd-button:eq(2)').click(function(){ alert('still here!') }).appendTo(document.body)

А теперь прокрутите вниз до нижней части этой страницы и нажмите на маленький глобусный значок, теперь скрытый под нижним колонтитулом. Вы получите alert. Все потому, что я позаботился о том, чтобы не remove сначала.

0 голосов
/ 18 февраля 2009

используйте jQuery1.3.1 live () для привязки событий, и вам не нужно об этом беспокоиться ..

Обновление: живые события устарели, но вы можете получить тот же эффект от $ (document) .on ().

...