Подтвердить что ты не робот

JQuery: live() vs delegate()

Я использую jQuery в своем веб-приложении. Читая его документацию, я читал о live() и delegate(). Хотя они объяснили оба метода, я не понимаю точной разницы между ними. Также не уверен, какой метод идеален в этом сценарии.

Пожалуйста, помогите мне получить четкое представление об этих методах.

Спасибо

4b9b3361

Ответ 1

.live() требует немедленного запуска селектора, если вы не используете результат, который очень расточительно. Обработчик событий здесь привязан к document, поэтому все события этого типа из любых пузырьков элементов должны быть проверены. Вот пример использования:

$(".myClass").live("click", function() { alert("Hi"); });

Обратите внимание, что оператор $(".myClass") запускает этот селектор, чтобы найти все элементы с этим классом, даже если мы не заботимся о них, все, что нам нужно, это строка ".myClass", которая будет соответствовать позже, когда события click будут пузыряться до document.


.delegate() фактически использует .live() внутренне, но с контекстом. Селектор не запускается немедленно, поэтому он более эффективен и не привязан к document (хотя он может) он гораздо более локальный... и все эти другие события из других деревьев элементов, которые вам не нужны никогда даже не проверяются при барботировании... снова более эффективными. Вот пример использования:

$("#myTable").delegate("td", "click", function() { alert("Hi"); });

Теперь, что здесь произошло? Мы запустили $("#myTable"), чтобы связать элемент (по общему признанию, более дорогой, чем document), но мы используем результат. Затем мы присоединяем обработчик событий к этим (или в других случаях) элементам. Только clicks изнутри этого элемента проверяются на селектор "td", когда они происходят, а не везде, как .live() (так как все внутри document).

Ответ 2

delegate() отображает live() в коде jQuery. Основное отличие заключается в том, что live() вызывается для элемента, для которого вы хотите делегировать события другому элементу. live() передаст эти события объекту документа.

delegate(), с другой стороны, позволяет вам установить, какие события элемента делегированы, передав селектор. События, которые пузырятся до этого элемента, обрабатываются, если исходный элемент соответствует селектору.

Как указано @NickCraver , delegate() работает лучше, чем live, потому что он не обязательно захватывает события из каждого элемента на странице, и он не запрашивает селектор сразу.

Ответ 3

Из документации jQuery:

Как и в jQuery 1.7, метод .live() устарел. Используйте .on() для присоединения обработчиков событий. Пользователи более старых версий jQuery должны использовать .delegate() в предпочтении .live().

http://api.jquery.com/live/

Ответ 4

Живой метод:

$("#mymethod").live("click", function() { alert("It checks the entire DOM"); });

Live Method Checks #mymethod во всей DOM (иногда это займет время, основанное на вашем содержимом DOM)

Способ делегирования:

$('.mycontainer').delegate('#mymethod','click',function() { alert('Checks only in mycontainer portion') });

Delagate не ищет ваш DOM, который ищет его только в вашей части mycontainer. (Улучшение производительности)