Почему событие DOMSubtreeModified не рекомендуется на уровне DOM 3?
Почему событие DOMSubtreeModified устарело и что мы должны использовать вместо этого?
2 ответа
Если вы прокрутите немного вниз, вы увидите:
Предупреждение!
MutationEvent
интерфейс был представлен в DOM Level 2 Events, но еще не был полностью и функционально реализован в пользовательских агентах. Кроме того, были высказаны критические замечания о том, что интерфейс в том виде, в котором он разработан, представляет проблему производительности и реализации. Новая спецификация находится в стадии разработки с целью рассмотрения вариантов использования, которые решаются событиями мутации, но более производительным способом. Таким образом, эта спецификация описывает события мутации для справки и полноты унаследованного поведения, но не одобряет использование обоихMutationEvent
интерфейс иMutationNameEvent
интерфейс.
API замены - это наблюдатели мутаций, которые полностью определены в стандарте жизни DOM, который заменяет всю глупость DOM уровня X.
Я думаю, что замена будет наблюдателей мутации: https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
var whatToObserve = {childList: true, attributes: true, subtree: true, attributeOldValue: true, attributeFilter: ['class', 'style']};
var mutationObserver = new MutationObserver(function(mutationRecords) {
$.each(mutationRecords, function(index, mutationRecord) {
if (mutationRecord.type === 'childList') {
if (mutationRecord.addedNodes.length > 0) {
//DOM node added, do something
}
else if (mutationRecord.removedNodes.length > 0) {
//DOM node removed, do something
}
}
else if (mutationRecord.type === 'attributes') {
if (mutationRecord.attributeName === 'class') {
//class changed, do something
}
}
});
});
mutationObserver.observe(document.body, whatToObserve);