2010-07-26 5 views
13

Sowohl document.getElementsByTagName ('div') als auch document.querySelectorAll ('div') geben die NodeList-Auflistung zurück. Der einzige Unterschied ist, dass die erste Methode Live-Collection und die zweite eine statische zurückgibt.Wie kann man zwischen Live- und Nicht-Live-NodeList-Sammlungen unterscheiden?

Die Frage ist - Gibt es eine Möglichkeit, ein Objekt von einem anderen nur durch die Überprüfung dieser Objekte zu unterscheiden (d. H. Nicht versuchen, einige Elemente hinzuzufügen/zu entfernen, um "Lebendigkeit" zu testen)?

Dank im Voraus

Antwort

6

Die NodeList Schnittstelle Agnostiker seiner toten oder lebenden Zustand ist.

interface NodeList { 
    Node item(in unsigned long index); 
    readonly attribute unsigned long length; 
}; 

Es enthält nur eine Eigenschaft length, und ein Verfahren item so bin ich fürchte, es ist derzeit nicht möglich, zu bestimmen, ob ein Objekt, ohne das DOM zu manipulieren und zu sehen, die Auswirkungen unter Spannung steht.

+0

Anurag, danke für diese Antwort – shabunc

+0

Sie sind willkommen, und eine sehr interessante Frage. Gibt es einen bestimmten Grund, warum Sie die * Lebendigkeit * des Objekts überprüfen möchten? Wenn der Grund gut ist und echte Probleme löst, könnte es auch den spec-Autoren bei w3 vorschlagen. – Anurag

+0

'document.querySelectorAll' gibt eine' StaticNodeList' zurück, die definitionsgemäß nicht "live" ist. Unabhängig davon, ob ich 'NodeList' abfragen kann, frage ich mich, ob es sicher ist, dass 'NodeList' per Konvention * immer * live ist. –

6
a=document.querySelectorAll('a'); 
b=document.getElementsByTagName('a'); 

a.toString() == "[object NodeList]" 
b.toString() == "[object HTMLCollection]" 

(in FF/Chrome)

+1

dies ist zufällig, nicht definitiv.' document.getElementsByName ('link'). toString() == "[object NodeList]" 'und es ist live – chiliNUT

Verwandte Themen