Подключитесь к добавлению новых элементов DOM с помощью jQuery (или простого JS).

StackOverflow https://stackoverflow.com/questions/893995

Вопрос

Чтобы внести ясность:Я не спрашиваю, как поместить существующие перехватчики в новые элементы 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 нагружало процессор.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top