Я хочу, чтобы выполнить функцию, когда некоторые HTML или ввод добавляются в HTML. Это возможно?
Например, добавлен текстовый ввод, затем должна быть вызвана функция.
Я хочу, чтобы выполнить функцию, когда некоторые HTML или ввод добавляются в HTML. Это возможно?
Например, добавлен текстовый ввод, затем должна быть вызвана функция.
Ответы:
Обновление 2015 года, новое
MutationObserver
поддерживается современными браузерами:Chrome 18+, Firefox 14+, IE 11+, Safari 6+
Если вам нужно поддержать старые, вы можете попытаться использовать другие подходы, подобные тем, которые указаны в этом 5 (!) -Летнем ответе ниже. Там будут драконы. Наслаждаться :)
Кто-то еще меняет документ? Потому что, если у вас есть полный контроль над изменениями, вам просто нужно создать свой собственный
domChanged
API - с функцией или пользовательским событием - и запускать / вызывать его везде, где вы что-то изменяете.DOM Level-2 имеет типы событий мутации , но старая версия IE не поддерживает его. Обратите внимание, что события мутации не рекомендуются в спецификации событий DOM3 и имеют снижение производительности .
Вы можете попытаться эмулировать событие мутации
onpropertychange
в IE (и вернуться к подходу грубой силы, если ни один из них не доступен).Для полного domChange интервал может быть чрезмерным. Представьте, что вам нужно сохранить текущее состояние всего документа и проверить, чтобы все свойства каждого элемента были одинаковыми.
Может быть, если вас интересуют только элементы и их порядок (как вы упомянули в своем вопросе), то
getElementsByTagName("*")
может сработать. Это срабатывает автоматически, если вы добавляете элемент, удаляете элемент, заменяете элементы или изменяете структуру документа.Я написал подтверждение концепции:
Использование:
Это работает на IE 5.5+, FF 2+, Chrome, Safari 3+ и Opera 9.6+
источник
На данный момент это наилучший подход с наименьшим кодом:
IE9 +, FF, Webkit:
источник
mutations, observer
параметры функции обратного вызова для большего контроля.Я недавно написал плагин, который делает именно это - jquery.initialize
Вы используете это так же, как
.each
функцияОтличие в
.each
том, что он берет ваш селектор, в этом случае.some-element
и ждет новых элементов с этим селектором в будущем, если такой элемент будет добавлен, он тоже будет инициализирован.В нашем случае функция инициализации просто меняет цвет элемента на синий. Так что, если мы добавим новый элемент (неважно, с ajax или даже инспектором F12 или чем-то еще), например:
Плагин начнет его немедленно. Также плагин гарантирует, что один элемент инициализируется только один раз. Таким образом, если вы добавите элемент, затем
.detach()
из тела, а затем добавите его снова, он не будет инициализирован снова.Плагин основан на
MutationObserver
- он будет работать на IE9 и 10 с зависимостями, как описано на странице readme .источник
или вы можете просто создать свое собственное событие , которое будет проходить везде
Полный пример http://jsfiddle.net/hbmaam/Mq7NX/
источник
Это пример использования MutationObserver из Mozilla, адаптированный из этого поста в блоге.
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
источник
Используйте интерфейс MutationObserver, как показано в блоге Габриэля Романато
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
источник
Как насчет расширения JQuery для этого?
Jquery 1.9+ имеет встроенную поддержку для этого (я слышал, не проверял).
источник