Слушатели событий в jQuery удаляются автоматически при удалении элемента с помощью .html()?

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

Но что произойдет, если мы "удалим" элементы с помощью .html()?

Нужно ли отменить все элементы перед изменением любого html, чтобы избежать утечек памяти?

Ответы

Ответ 1

Да, они будут удалены. jQuery очистит события и т.д., связанные с удаленными элементами. Он не будет копировать события, если вы делаете что-то вроде $(elm1).html($ elm2.html())

Ответ 2

Да, они будут удалены, даже если вы используете html(). Исходный код jQuery подтверждает это.

Ответ 3

Просто немного раскройте:

  • .remove(), .html(), .empty() и т.д. - все удаляют слушатели.
  • .detach() не удаляет прослушиватели
  • .clone() имеет параметры, позволяющие вам решить, копируются ли данные/слушатели.

Итак, если вы хотите сохранить слушателей, используйте .detach().