Наблюдатели мутаций --- поддерево
Я читаю этот 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
}
Надеюсь, это поможет.