Присоединяйтесь к добавлению новых элементов DOM с помощью jQuery (или обычного JS) - PullRequest
2 голосов
/ 21 мая 2009

Для ясности: я не спрашиваю, как поместить существующие хуки в новые элементы DOM. Я знаю о функции live () и старом плагине livequery. Я спрашиваю что-то еще.

Что я хочу знать, так это как подключиться к самому созданию новых элементов DOM. Причина, по которой я спрашиваю, заключается в том, что я создаю JS-скрипт стороннего пользователя, который не контролирует сторонние скрипты. Эти собственные скрипты (которые запутаны) периодически обновляют страницу, добавляя новые элементы DOM. Я хочу выполнить код после добавления этих элементов.

Использование $ ('...') .bind ('ajaxSuccess', function () .....) работает для некоторых дополнений, но не для всех.

Ответы [ 3 ]

2 голосов
/ 21 мая 2009

Если они всегда добавляются с помощью метода document.createElement, вы можете просто заменить его и выполнить там отслеживание.

document.replacedCreateElement = document.createElement;
document.createElement = function(tagName) {
    this.replacedCreateElement(tagName);
    //do your tracking  
}
1 голос
/ 21 мая 2009

Ну, я пошел с этой парой, которая, кажется, запускает нужные обновления DOM в течение 20 секунд или меньше:

$( '#someid' ).bind( 'ajaxSuccess', function() { ... } );
$( '#someid' ).ajaxSuccess( function( e, r, s ) { ... } );

Я бы предпочел не замедлять загрузку страниц в зависимости от livequery, а замененное решение CreateElement перегружало процессор.

1 голос
/ 21 мая 2009

Я не уверен, почему вы спрашиваете, знаете ли вы о livequery . Livequery позволит вам подключиться к произвольным новым DOM-элементам. Помимо этого, единственное, что я знаю, это подключиться к методам DOM (таким как appendChild и т. Д ...)

Функция live (), которая была интегрирована в jQuery, на самом деле не является полной реализацией livequery. (Ресиг подумал, что это слишком большая функциональность, чтобы интегрировать ее без чрезмерного увеличения размера кода)

В live () отсутствует следующая функция типа:

$('*').livequery(function() {
 // do something
});

Используйте это, и оно должно ловить любые дополнения.

...