Изменить новые элементы при их добавлении

0

Это делается моим почтовым индексом при загрузке страницы:

$('a.people').each(function (index, value) {
     $('<i>'+$(value).text()+'</i>').insertBefore(value);
});

Веб-приложение предназначено для пользователей, добавляет новые элементы $('a.people') когда пользователь выполняет различные действия.

Как я могу запустить свой код для вновь добавленных элементов? Есть ли событие, которое запускается при добавлении новых элементов в DOM?

Я не хочу использовать setInterval потому что код будет циклическим, если это не требуется, и повлияет на производительность.

  • 0
    Как вы планируете добавлять элементы?
  • 0
    вам нужно либо найти событие для присоединения, либо запустить setInterval
Показать ещё 4 комментария
Теги:
userscripts

2 ответа

1
Лучший ответ

Если вы хотите использовать новые элементы, когда целевая страница добавляет их, у вас есть два варианта:

(Обратите внимание, что старшие события мутации устарели и не совпадают с наблюдателями мутаций.)

Кроме того, вам нужно будет отслеживать, какие узлы были сделаны, и не менять их повторно. Для этого есть утилита: 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);
}
  • 0
    Большое вам спасибо, Брок! Это именно то, что я пытался реализовать, но я не мог заставить свой MutationObserver прослушивать дочерние элементы.
  • 0
    Пожалуйста! Рад помочь.
0

вам нужно использовать jquery on() для динамически добавленных элементов

  • 0
    и событие тоже.
  • 0
    ну, я не правильно понял ваш вопрос. вы можете обернуть свой код внутри цикла в функции и вызывать его каждый раз, когда добавляется новый элемент

Ещё вопросы

Сообщество Overcoder
Наверх
Меню