Наблюдатели мутаций --- поддерево

Я читаю этот http://lists.w3.org/Archives/Public/public-webapps/2011JulSep/1622.html и кажется, что поведение Chrome отличается от спецификации. Если я правильно понял спецификации, определение "поддерева" для элемента означает, что об изменениях в поддереве этого элемента (включая сам элемент) следует сообщать. Однако при выполнении этого куска кода я ничего не получаю.

var observer = new WebKitMutationObserver(function(e){console.log(e);})
observer.observe(document.body, {subtree:true, attributes:true});
document.body.appendChild(document.createElement('div'));

Что мне не хватает? Кто-нибудь может уточнить это? Спасибо!

2 ответа

Решение

Документация неясна, но subtree игнорируется, если вы не укажете childList:true,

Дело за attributes а также attributeFilter та же.

Надеюсь, это все еще помогает.

Согласно этой статье:

childList: установите в значение true, если необходимо наблюдать за добавлением и удалением дочерних элементов целевого узла (включая текстовые узлы).

поддерево: установите в значение true, если наблюдаются мутации не только цели, но и потомков цели.

Это также объясняет поддерево в зависимости от childList.

В mutationObserver config, по крайней мере, один из attributes, characterData, или childList необходимо установить true.

Теперь, если вы просто установите childList: true, то он будет наблюдать только прямые дочерние элементы (глубина 1) целевого элемента, а не все поддерево.

Чтобы увидеть все поддерево, оба childList а также subtree необходимо установить true.

например

{
   childList: true,
   subtree: true
}

Надеюсь, это поможет.

Другие вопросы по тегам