DOMCharacterDataModified не работает последовательно через Firefox и Chrome. Кто прав? - PullRequest
3 голосов
/ 30 июня 2011

Я сделал эту скрипку, которая слушает несколько различных MutationEvents, в частности DOMCharacterDataModified, DOMSubtreeModified и DOMNodeInserted при изменении innerHTML элемента div.

http://jsfiddle.net/newtang/kysTm/15/

Интересно, что Chrome показывает: DOMCharacterDataModified, DOMSubtreeModified

пока Firefox 5 показывает: DOMNodeInserted

Я не совсем уверен, кто прав. Я нашел эту старую ошибку Mozilla: https://bugzilla.mozilla.org/show_bug.cgi?id=368133 и документы W3 (http://www.w3.org/TR/DOM-Level-2-Events/events.html),, но я не нахожу ничего особенно информативного.

Кто-нибудь знает, что такое правильное поведение? Я хотел бы сообщить об ошибке кому-то, чтобы она была последовательной.

Ответы [ 2 ]

3 голосов
/ 30 июня 2011

В WebKit есть «оптимизация», когда вы устанавливаете innerHTML в то, что не содержит разметки, и первый дочерний узел узла, для которого вы устанавливаете его, является текстовым узлом, они изменят текст в текстовом узле напрямую, вместо того, чтобы делать то, что нужно. спецификация требует (удаление всех дочерних элементов и создание нового текстового дочернего элемента). Отсюда и разница в мутации.

2 голосов
/ 30 июня 2011

Поведение Firefox кажется правильным. Вы устанавливаете innerHTML, так что вы не изменяете characterData существующего textNode, вы вставляете новый textNode и удаляете любое существующее содержимое (вы также можете наблюдать DOMNodeRemoved в вашем примере, вы увидите, что он тоже срабатывает)

Обратите внимание на разницу при реальном изменении данных textNode: http://jsfiddle.net/doktormolle/yQu8v/

...