Если я правильно понимаю ваши требования, один из способов сделать это - с помощью плагина Live Query .
Live Query ... обладает способностью стрелять
функция (обратный вызов), когда она совпадает
новый элемент и другая функция
(обратный вызов) для когда элемент не
больше соответствует
Например:
$('#someRegion a').livequery( function(){
do_something();
});
Обновление: Поскольку изменения DOM не выполняются через jQuery, к сожалению, livequery их не видит. Я размышлял над этой проблемой раньше и рассмотрел решение на основе опроса в
этот ответ .
Обновление: Опрос выглядит некрасиво, но если на самом деле нет другой альтернативы, вот решение на основе опроса, которое использует jQuery-манипуляцию, чтобы заставить livequery «увидеть» изменения. Вам бы хотелось рассматривать что-то подобное в качестве крайней меры - если нет возможности привязать метод обратного вызова.
Сначала настройте livequery, следя за контейнером, в котором будут происходить обновления:
$('div#container').livequery( function(){
$(this).css('color','red'); // do something
});
А затем используйте setInterval()
, здесь обернутый в удобную функцию:
function pollUpdate( $el, freq ){
setInterval( function(){
$el.toggleClass('dummy');
}, freq);
};
Так что вы можете иметь:
$(document).ready( function(){
pollUpdate( $('div#container'), 500 );
});
Вот рабочий пример . Нажмите кнопку, чтобы добавить новые элементы DOM без jQuery, и вы увидите, что они (в конце концов) подобраны и рестайлинговы с помощью livequery. Не красиво, но это работает.