change()
функция работает и обнаруживает изменения в элементах формы, но есть ли способ определить, когда содержимое элемента DOM было изменено?
Это не работает, если только #content
это не элемент формы
$("#content").change( function(){
// do something
});
Я хочу, чтобы это срабатывало при выполнении чего-то вроде:
$("#content").html('something');
Также html()
или у append()
функции нет обратного вызова.
Какие-либо предложения?
javascript
jquery
dom
Эльзо Валуги
источник
источник
Ответы:
Это события мутации .
Я не использовал API-интерфейсы событий мутаций в jQuery, но беглый поиск привел меня к этому проекту на GitHub. Я не знаю о зрелости проекта.
источник
Я знаю, что этому посту год, но я хотел бы предложить другой подход к решению тем, у кого есть аналогичная проблема:
Событие изменения jQuery используется только в полях ввода пользователя, потому что, если манипулируют чем-то еще (например, div), эта манипуляция исходит из кода. Итак, найдите, где происходит манипуляция, а затем добавьте туда все, что вам нужно.
Но если это невозможно по какой-либо причине (вы используете сложный плагин или не можете найти возможности «обратного вызова»), то подход jQuery, который я предлагаю, выглядит следующим образом:
а. Для простых манипуляций с DOM используйте jQuery chaining and traversing,
$("#content").html('something').end().find(whatever)....
б. Если вы хотите сделать что-то еще, используйте jQuery
bind
с настраиваемым событием иtriggerHandler
Вот ссылка на обработчик триггера jQuery: http://api.jquery.com/triggerHandler/
источник
bind
ожидает, что ваш обработчик вернет файлbool
.Браузер не будет запускать событие onchange для
<div>
элементов.Я думаю, что причина этого в том, что эти элементы не изменятся, если не будут изменены с помощью javascript. Если вам уже нужно изменить элемент самостоятельно (а не сам пользователь), вы можете просто вызвать соответствующий сопутствующий код одновременно с изменением элемента, например:
Вы также можете вручную запустить событие, подобное этому:
Если ни одно из этих решений не работает в вашей ситуации, не могли бы вы предоставить дополнительную информацию о том, чего вы конкретно пытаетесь достичь?
источник
как насчет http://jsbin.com/esepal/2
источник
Попробуйте выполнить привязку к
DOMSubtreeModified
событию seeign, поскольку тест также является частью DOM.см. этот пост здесь, на SO:
как-сделать-я-контролировать-дом-для-изменений
источник
Попробуйте это, он был создан Джеймсом Падолси (JP здесь, на SO) и делает именно то, что вы хотите (я думаю)
http://james.padolsey.com/javascript/monitoring-dom-properties/
источник
А с HTML5 у нас есть собственные наблюдатели за мутациями DOM .
источник
Это не совсем ответ jQuery, но его полезно упомянуть для отладки.
В Firebug вы можете щелкнуть правой кнопкой мыши элемент в дереве DOM и настроить «Прерывание при изменении атрибута»:
Когда в скрипте изменяется атрибут, появляется окно отладки, и вы можете отслеживать, что происходит. Также есть опция для вставки и удаления элементов ниже (бесполезно скрыта всплывающим окном на снимке экрана).
источник
Я разрабатываю крошечную библиотеку JS под названием mutabor ( https://github.com/eskat0n/mutabor ), которая предназначена для упрощения использования событий мутации DOM. См. Примеры на demo.html.
источник
Попробуйте плагин livequery. Кажется, это работает для чего-то подобного, что я делаю.
http://docs.jquery.com/Plugins/livequery
источник
Часто простой и эффективный способ добиться этого - отслеживать, когда и где вы изменяете DOM.
Вы можете сделать это, создав одну центральную функцию, которая всегда отвечает за изменение DOM. Затем вы выполняете необходимую очистку измененного элемента из этой функции.
В недавнем приложении мне не требовались немедленные действия, поэтому я использовал обратный вызов для функции handly load (), чтобы добавить класс к любым измененным элементам, а затем обновлять все измененные элементы каждые несколько секунд с помощью таймера setInterval.
Тогда вы можете справиться с этим, как хотите - например,
источник
Вы можете добавить опцию обратного вызова к функции html (или любой другой):
Демо здесь.
Вы вносите изменения в какой-то элемент, а не элемент вынужден измениться чем-то, что вы должны уловить.
источник
Я написал фрагмент, который будет проверять изменение элемента в событии.
Итак, если вы используете сторонний код javascript или что-то в этом роде, и вам нужно знать, когда что-то появляется или изменяется при нажатии, тогда вы можете.
Допустим, что для приведенного ниже фрагмента вам нужно знать, когда содержимое таблицы изменяется после нажатия кнопки.
Псевдокод:
источник
Мы можем добиться этого с помощью событий мутации . Согласно сайту www.w3.org, модуль событий мутации предназначен для уведомления о любых изменениях в структуре документа, включая изменения атрибутов и текста. Подробнее СОБЫТИЯ МУТАЦИИ
Например :
источник
Невозможно, я считаю, что произошло событие, связанное с изменением содержимого, но это определенно не x-browser
Должен ли я сказать, что невозможно без каких-то неприятных интервалов в фоновом режиме!
источник