У меня есть DIV , который имеет свое содержание все время меняется, будь то ajax requests
, jquery functions
, и blur
т.д. и т.п.
Есть ли способ, которым я могу обнаружить какие-либо изменения в моем div в любой момент времени?
Я не хочу использовать интервалы или значение по умолчанию.
Нечто подобное сделало бы
$('mydiv').contentchanged() {
alert('changed')
}
keypress
событие с contenteditable<div>
элементом. Я не уверен, что решения там применимы к этому. Они определенно не поймут никаких программных изменений в содержании элемента.Ответы:
Если вы не хотите использовать таймер и проверить innerHTML, вы можете попробовать это событие
Более подробная информация и данные о поддержке браузера находятся здесь .
Внимание: в новых версиях jQuery bind () устарела, поэтому вместо него следует использовать on ():
источник
$("body").on('DOMSubtreeModified', "mydiv", function() { });
Использование Javascript MutationObserver
источник
Так
$("#selector").bind()
как устарела , вы должны использовать:источник
#
чтобы указать, что символ должен идти перед селектором.Вы можете попробовать это
но это может не работать в Internet Explorer, не проверял
источник
clearTimeout(window.something); window.something = setTimeout(...);
Вы ищете MutationObserver или Mutation Events . Ни везде, ни в мире разработчиков не поддерживаются.
Если вы знаете (и можете быть уверены, что размер div изменится), вы можете использовать событие изменения размера кроссбраузера .
источник
Следующий код работает для меня.
Надеюсь, это поможет кому-то :)
источник
Нет встроенного решения этой проблемы, это проблема вашего дизайна и шаблона кодирования.
Вы можете использовать шаблон издателя / подписчика. Для этого вы можете использовать пользовательские события jQuery или собственный механизм событий.
Первый,
Теперь вы можете подписаться на события divhtmlchanging / divhtmloted следующим образом:
Теперь вы должны изменить свои изменения содержимого div с помощью этой
changeHtml()
функции. Таким образом, вы можете отслеживать или делать необходимые изменения соответствующим образом, поскольку связываете аргумент данных обратного вызова, содержащий информацию.Вы должны изменить HTML вашего div таким образом;
А также, вы можете использовать это для любого элемента (ов) HTML, кроме элемента ввода. В любом случае вы можете изменить это, чтобы использовать с любым элементом (ами).
источник
Используйте MutationObserver, как показано в этом фрагменте, предоставленном Mozilla , и адаптирован из этого поста в блоге.
Кроме того, вы можете использовать пример JQuery, показанный в этой ссылке
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
источник
Вы можете сохранить старый innerHTML элемента div в переменной. Установите интервал, чтобы проверить, соответствует ли старый контент текущему контенту. Когда это не правда, сделай что-нибудь.
источник
Попробуйте MutationObserver:
поддержка браузера: http://caniuse.com/#feat=mutationobserver
источник
При добавлении некоторого содержимого в div, будь то через jQuery или напрямую через de DOM-API, по умолчанию используется
.appendChild()
функция. Что вы можете сделать, это переопределить.appendChild()
функцию текущего объекта и внедрить в него наблюдателя. Теперь, переопределив нашу.appendChild()
функцию, нам нужно позаимствовать эту функцию у другого объекта, чтобы иметь возможность добавлять содержимое. Для этого мы вызываем.appendChild()
другой div, чтобы, наконец, добавить содержимое. Конечно, это имеет значение и для.removeChild()
.Здесь вы можете найти наивный пример. Вы можете расширить это самостоятельно, я думаю. http://jsfiddle.net/RKLmA/31/
Кстати: это показывает, что JavaScript соответствует принципу OpenClosed. :)
источник