В чем разница между документом и DOM? - PullRequest
1 голос
/ 10 июля 2010

Итак, я наткнулся на фрагмент о разнице между jQuery's bind () и live () - http://msdn.microsoft.com/en-gb/scriptjunkie/ee730275.aspx - (раздел Live and Let Die)

BindФункция регистрирует обработчики событий с фактическими выбранными элементами DOM, но функция live регистрирует обработчики событий в документе.

Я использовал обе функции, поэтому я получаю разницу впрактика т.е. .live ('click', function () {..});будет запускаться на узле, внедренном в JS, в то время как эквивалент связывания не будет.

Что я не знаю, так это отношения / различия между документом и DOM.Кто-нибудь может просветить меня, пожалуйста?

Спасибо, Денис

Ответы [ 2 ]

2 голосов
/ 10 июля 2010

Документ, на который вы ссылаетесь - это браузер переменных window.document, представленный в JavaScript, и корневой узел DOM.Помните, что DOM, как и ваш HTML-документ, представляет собой иерархию элементов.

То, как события работают в DOM, заключается в том, что они проходят от вершины иерархии, документа, до рассматриваемого элемента, позволяя каждомуэлемент между, чтобы захватить событие.Затем они делают второй проход обратно по иерархии, называемый пузырями.Оба метода jQuery, о которых вы упомянули, подключаются к фазе всплывающих событий.

Подключившись к событию click в документе, вы увидите все события click на всех элементах, поскольку все они проходятчерез корневой узел, документ.Затем jQuery фильтрует то, что вам нужно, на основе вашего селектора.

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

0 голосов
/ 10 июля 2010

Это не разница между документом и DOM. Это разница между объектом документа и объектами отдельных элементов DOM. Функция live отслеживает все события в документе, и если объект, вызвавший событие, соответствует селектору, он вызывает обработчик. С другой стороны, функция bind отслеживает события, инициируемые конкретным объектом элемента (обработчик присоединяется к этому конкретному объекту). Если вы удалите и заново создадите элемент, это будет другой объект, к которому не будет прикреплен обработчик событий. Это означает, что вы должны знать, что это за объект во время запуска bind.

...