Порядок списка узлов DOM, возвращаемого getChildNodes()

StackOverflow https://stackoverflow.com/questions/66032

  •  09-06-2019
  •  | 
  •  

Вопрос

Метод DOM getChildNodes() возвращает NodeList из детей нынешнего Node.В то время как NodeList упорядочен, гарантирован ли порядок документов в списке?

Например, учитывая <a><b/><c/><d/></a> является a.getChildNodes() гарантированно вернет NodeList с b, c и d в этой последовательности?

А Javadoc по этому поводу не ясно.

Это было полезно?

Решение

По моему опыту, да.А Спецификация DOM ничуть не яснее.Если вы параноик, попробуйте что-нибудь вроде

current = node.firstChild;
while(null != current) {
    ...
    current = current.nextSibling;
}

Другие советы

Список узлов, упорядоченный по документам, — это поведение в других реализациях DOM, таких как Javascript или Python.А список узлов в случайном порядке был бы совершенно бесполезен.Я думаю, что можно безопасно полагаться на то, что узлы будут возвращены в порядке документа.

Мой опыт показывает, что каждый раз, когда я удосуживался просмотреть документ, он находился в порядке.Однако я полагаю, что я где-то читал, что порядок документов не гарантирован.Я сейчас не могу найти, где я это прочитал, так что воспринимайте это как слухи.Я думаю, твой лучший выбор, если ты должен если бы они были в порядке документов, то было бы использовать FirstChild, а затем NextSibling, пока не останется родственных братьев.

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

В вашем примере, как представлено.Я так считаю.Однако я сталкивался с реальным опытом, когда пространства интерпретировались как узлы, поэтому:


<a><b/><c/><d/></a>

отличается от


<a><b/> <c/><d/></a>

если вы смотрите на индекс [1], Firefox и IE могут показывать разные результаты.Я бы посоветовал не полагаться на порядок в зависимости от ваших потребностей.

Да, они упорядочены, поскольку он возвращает nodeList, вам нужно будет сказать getNamedChildNodes, чтобы получить список, который не упорядочен, как в NamedNodeList.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top