Порядок списка узлов DOM, возвращаемого getChildNodes()
Вопрос
Метод 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.