Quanto è affidabile “ordinare” in NodeList interrogate

Mi sto interrogando su questo argomento da un po ‘di tempo. I metodi in questione sono i seguenti:

  • getElementsByTagName
  • getElementsByClassName
  • getElementsByName
  • querySelectorAll

Per quanto ne so, questi metodi DOM sono gli unici metodi che sono in grado di restituire NodeLists congelati o NodeLists . Per alcuni di questi metodi, l’ordine è definito dalla specifica W3C . Ad esempio, http://www.w3.org scrive quanto segue per NodeLists restituite da querySelectorAll

I metodi querySelectorAll () sulle interfacce Document, DocumentFragment ed Element devono restituire un NodeList contenente tutti i nodes Element corrispondenti all’interno dei sottoalberi del nodo di contesto, nell’ordine del documento. Se non ci sono nodes corrispondenti, il metodo deve restituire un NodeList vuoto.

Tuttavia, non sono riuscito a trovare specifiche chiare simili per gli altri metodi che ho menzionato. Le mie domande qui sono:

  • c’è un ordine definito (molto probabilmente l’ordine dei documenti) per i risultati ?
  • quanto sono affidabili e cross-browser implementate quelle specifiche ?

Per essere assolutamente chiari:

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

Sì. Tutti sono in ordine di documento / albero.

  • getElementsByName ( DOM Level-2-HTML ) restituisce una NodeList
  • querySelectorAll ( Selectors API ) restituisce una NodeList “nell’ordine del documento”
  • getElementsByTagName ( DOM ) restituisce un HTMLCollection
  • getElementsByClassName ( DOM ) restituisce un HTMLCollection

HTMLCollection che NodeList sono specificati

gli elementi sono ordinati in ordine albero .

quando questi sono accessibili tramite indizi.

Penso che quelle specifiche (anche se le versioni collegate potrebbero essere più recenti di alcune implementazioni) sono implementate in modo affidabile da tutti i browser, soprattutto perché l’albero è il più logico e facile da programmare. Tuttavia, potrebbe essere necessario controllare che alcuni browser possano restituire elenchi costituiti da elementi diversi perché la loro corrispondenza tra i nodes è diversa. Potrei pensare a qualche stranezza nel determinare il name di un elemento.