2008-08-27 1 views
6

Вчера я ввязался в дискуссию о реалиях реализации DOM, вызвав интересный вопрос о поведении Text.splitText и Element.normalise и о том, как они должны себя вести.Должен ли DOM splitText и нормализовать композицию, чтобы дать идентификатор?

В DOM Level 1 Core, Text.splitText определяется как ...

Перерывы этот текстовый узел на два текстовых узлов с указанным смещением, сохраняя как в дереве, как братьев и сестер. Этот узел затем содержит только содержимое до точки смещения. И новый узел Text, который вставлен в качестве следующего брата этого узла, содержит все содержимое в точке и после точки смещения.

Нормализация является ...

Кладет все текстовые узлы в полной глубине к югу от дерева под этой стихии в «нормальном» виде, где только разметки (например, теги, комментарии, обработка инструкции, разделы CDATA и ссылки на сущности) разделяет текстовые узлы, т. е. нет смежных текстовых узлов. Это можно использовать для обеспечения того, чтобы представление DOM документа было таким же, как если бы оно было сохранено и перезагружено, и полезно, когда будут использоваться операции (такие как запросы XPointer), которые зависят от конкретной структуры дерева документов.

Так что, если я беру текстовый узел, содержащий "Hello World", на который ссылается TextNode и сделать

textNode.splitText(3) 

TextNode теперь имеет содержание "Hello", и новый брат, содержащий "Мир"

Если бы я тогда

textNode.parent.normalize() 

что TextNode? Спецификация не дает понять, что textNode все еще должен быть дочерним элементом его предыдущего родителя, просто обновлен, чтобы содержать все смежные текстовые узлы (которые затем удаляются). Кажется, что это должно быть поведение conforment для удаления всех смежных текстовых узлов, а затем воссоздать новый узел с конкатенацией значений, оставив textNode указывая на то, что больше не является частью дерева. Или мы можем обновить textNode таким же образом, как и в splitText, поэтому он сохраняет свою позицию дерева и получает новое значение.

Выбор поведения действительно совсем другой, и я не могу найти разъяснения, на которых это правильно, или если это просто надзор в спецификации (он, похоже, не разъясняется на уровнях 2 или 3). Могут ли любые гуру DOM/XML пролить некоторый свет?

ответ

3

Я был в рабочей группе DOM в первые дни; Я уверен, что мы означали для TextNode содержать новое значение присоединились, но если мы не сказать его в спецификации, вполне возможно, что некоторые реализации может создать новый узел вместо использования TextNode, хотя это потребует больше работы для разработчиков.

В случае сомнений, программа защищена.

1

Хотя представляется, что это разумное предположение, я согласен с тем, что оно явно не разъяснено в спецификации. Все, что я могу добавить, это то, что я его читал, один из textNode или новый родной брат (т. Е. Возвращаемое значение от splitText) будет содержать новое объединенное значение. Оператор указывает, что все узлы в поддере помещаются в нормальная форма, а не то, что поддерево нормализовано к новой структуре. Я полагаю, что единственная безопасная вещь - сохранить ссылку на родителя до нормализации.

1

Я думаю, что все ставки отключены; Я определенно не буду зависеть от какого-либо поведения. Единственное, что нужно сделать, это снова получить узел от родителя.

Смежные вопросы