То, что вы пытаетесь сделать - это не то, для чего предназначен плагин livequery .
$('div#container').livequery(matched, unmatched);
Это говорит livequery:
- вызывает совпавшую функцию, когда
div
с идентификатором container
найден или добавлен в DOM с помощью одного из методов манипулирования DOM jQuery
- вызывает непревзойденную функцию, когда
div
с ранее найденным идентификатором container
был удален (или id
изменен) из DOM с помощью одного из методов манипуляции DOM jQuery
Таким образом, с вашим образцом будет выдано только оповещение о том, что обнаружено при загрузке страницы. Поскольку изменение innerHTML не добавляет и не удаляет div с идентификатором контейнера, livequery должен ничего не делать, и именно это он и делает.
Использование *
(вместо div#container
) вызовет только пару предупреждений при загрузке страницы, но снова не будет срабатывать, если вы используете методы JQuery DOM-Manipulation.
document.getElementById('container').innerHTML = 'updated test';
Не запускается matched()
как # 1, вы не используете jQuery для выполнения манипуляций; # 2 вы не добавляете новый элемент, который *
будет соответствовать.
document.getElementById('container').innerHTML = '<p>updated test</p>'
Не запускается matched()
, так как вы не используете jQuery для выполнения манипуляции (хотя вы добавляете элемент <p>
, который будет соответствовать селектору *
, но не будет зарегистрирован в livequery, поскольку он только прослушивает методы JQuery DOM-манипуляции (и только их выбор).
Если вместо этого вы используете
$("#container").html('<p>updated test</p>');
Сработает matched()
через 3 с. Если вы только делаете
$("#container").html('updated test');
matched()
не будет запущено, так как не было добавлено ничего, что соответствовало бы селектору *
, изменился только innerHTML уже соответствующего элемента