Это делается моим почтовым индексом при загрузке страницы:
$('a.people').each(function (index, value) {
$('<i>'+$(value).text()+'</i>').insertBefore(value);
});
Веб-приложение предназначено для пользователей, добавляет новые элементы $('a.people')
когда пользователь выполняет различные действия.
Как я могу запустить свой код для вновь добавленных элементов? Есть ли событие, которое запускается при добавлении новых элементов в DOM?
Я не хочу использовать setInterval
потому что код будет циклическим, если это не требуется, и повлияет на производительность.
Если вы хотите использовать новые элементы, когда целевая страница добавляет их, у вас есть два варианта:
(Обратите внимание, что старшие события мутации устарели и не совпадают с наблюдателями мутаций.)
Кроме того, вам нужно будет отслеживать, какие узлы были сделаны, и не менять их повторно. Для этого есть утилита: waitForKeyElements. Он использует опрос и обрабатывает все накладные расходы. Вы не заметите замедления страницы.
Полный usercript, подходящий для Greasemonkey или Tampermonkey, который заменяет ваш код вопроса, используя waitForKeyElements
:
// ==UserScript==
// @name _Italicize People entries
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
waitForKeyElements ("a.people", italicizePeople);
function italicizePeople (jNode) {
$('<i>' + jNode.text() + '</i>').insertBefore (jNode);
}
MutationObserver
прослушивать дочерние элементы.
вам нужно использовать jquery on() для динамически добавленных элементов