How reliable is “order” in queried NodeLists

戏子无情 提交于 2019-12-23 08:46:05

问题


I am wondering about this topic for quite a while. The methods in question are the following:

  • getElementsByTagName
  • getElementsByClassName
  • getElementsByName
  • querySelectorAll

As far as I know, those DOM methods are the only methods which are able to return frozen or live NodeLists. For some of those methods, order is defined by W3C spec. For instance, http://www.w3.org writes the following for NodeLists returned by querySelectorAll

The querySelectorAll() methods on the Document, DocumentFragment, and Element interfaces must return a NodeList containing all of the matching Element nodes within the subtrees of the context node, in document order. If there are no matching nodes, the method must return an empty NodeList.

However, I couldn't find similar clear specifications for the the other methods I mentioned. My questions here are:

  • is there a defined order (most likely document order) for the results ?
  • how reliable and cross-browser implemented are those specs ?

To be absolute clear:

<div>this</div>
<div>is</div>
<div>a demo</div>

// is this always guaranteed to be "<div>is</div>"
document.querySelectorAll('div')[1]

回答1:


Yes. All of them are in document order / tree order.

  • getElementsByName (DOM Level-2-HTML) returns a NodeList
  • querySelectorAll (Selectors API) returns a NodeList "in document order"
  • getElementsByTagName (DOM) returns a HTMLCollection
  • getElementsByClassName (DOM) returns a HTMLCollection

HTMLCollections and NodeLists are both specified to have

the elements are sorted in tree order.

when those are accessed via indizes.

I think that those specs (even though the linked versions might be newer than some implementations) are reliably implemented by all browsers, mostly because tree order is the most logical and easy-to-code one. Yet, you might need to watch out that some browsers might return lists consisting of different elements because their matching of nodes differs. I could think of some quirks when determining the name of an element.



来源:https://stackoverflow.com/questions/13102517/how-reliable-is-order-in-queried-nodelists

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!