Вы можете использовать DOMNodeInserted
и DOMNodeRemoved
, чтобы проверить, добавлены или удалены элементы. К сожалению, IE не поддерживает это.
$('#myDiv').bind('DOMNodeInserted DOMNodeRemoved', function(event) {
if (event.type == 'DOMNodeInserted') {
alert('Content added! Current content:' + '\n\n' + this.innerHTML);
} else {
alert('Content removed! Current content:' + '\n\n' + this.innerHTML);
}
});
Обновление
Вы можете сохранить исходное содержимое и будущие изменения с помощью .data()
. Вот пример.
var div_eTypes = [],
div_changes = [];
$(function() {
$('#myDiv').each(function() {
this['data-initialContents'] = this.innerHTML;
}).bind('DOMNodeInserted DOMNodeRemoved', function(event) {
div_eTypes.concat(e.type.match(/insert|remove/));
div_changes.concat(this.innerHTML);
});
});
Пример вывода:
> $('#myDiv').data('initialContents');
"<h1>Hello, world!</h1><p>This is an example.</p>"
> div_eTypes;
["insert", "insert", "remove"]
> div_changes;
["<iframe src='http://example.com'></iframe>", "<h4>IANA — Example domains</h4><iframe src='http://example.com'></iframe>", "<h4>IANA – Example domains</h4>"]
Обновление 2
Вы также можете включить DOMSubtreeModified
, потому что я обнаружил, что DOMNodeInserted
и DOMNodeRemoved
не срабатывают, если элемент innerHTML
заменен напрямую. Он по-прежнему не работает в IE, но по крайней мере он отлично работает в других браузерах.