Подключитесь к добавлению новых элементов DOM с помощью jQuery (или простого JS).
Вопрос
Чтобы внести ясность:Я не спрашиваю, как поместить существующие перехватчики в новые элементы DOM.Я знаю о функции live() и старом плагине livequery.Я спрашиваю о другом.
Что я хочу знать, так это как прицепиться к самому созданию новых элементов DOM.Причина, по которой я спрашиваю, заключается в том, что я создаю сторонний пользовательский JS-скрипт, который не имеет контроля над сторонними скриптами.Эти сторонние скрипты (которые запутаны) периодически обновляют страницу, добавляя новые элементы DOM.Я хочу выполнить код после добавления этих элементов.
Используя $( '...' ).bind( 'ajaxSuccess', function() .....) работает для некоторых дополнений, но не для всех.
Нет правильного решения
Другие советы
Если они всегда добавляются с помощью метода document.createElement, вы можете просто заменить его и отслеживать там.
document.replacedCreateElement = document.createElement;
document.createElement = function(tagName) {
this.replacedCreateElement(tagName);
//do your tracking
}
Я не уверен, почему ты спрашиваешь, если знаешь о живой запрос. Живой запрос позволит вам подключаться к произвольным новым элементам DOM.Помимо этого, единственное, что я знаю, это подключиться к методам DOM (таким как AppendChild и т. д.).
Функция live(), интегрированная в jQuery, на самом деле не является полной реализацией livequery.(Ресиг считал, что это слишком большая функциональность, чтобы ее можно было интегрировать без чрезмерного увеличения размера кода)
В live() отсутствует следующая функция типа:
$('*').livequery(function() {
// do something
});
Используйте это, и оно должно уловить любые дополнения.
Что ж, я выбрал эту пару, которая, похоже, запускает нужные обновления DOM в течение 20 секунд или меньше:
$( '#someid' ).bind( 'ajaxSuccess', function() { ... } );
$( '#someid' ).ajaxSuccess( function( e, r, s ) { ... } );
Я бы предпочел не замедлять загрузку страницы из-за зависимости от livequery, а решение replaceCreateElement нагружало процессор.