2010-07-26 19 views
13

Sia document.getElementsByTagName ('div') che document.querySelectorAll ('div') restituiscono la raccolta NodeList. L'unica differenza è che il primo metodo restituisce la raccolta live e la seconda - una statica.Come distinguere tra collezioni NodeList live e non live?

La domanda è: c'è qualche possibilità di distinguere un oggetto da un altro solo ispezionando questi oggetti (cioè, non tentare di aggiungere/rimuovere alcuni elementi per testare "liveness")?

grazie in anticipo

risposta

6

L'interfaccia NodeList è agnostica del suo status di morti o dal vivo.

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

Contiene solo una proprietà length, e un metodo item quindi ho paura che non è attualmente possibile per determinare se un oggetto è vivo senza manipolare il DOM e vedere gli effetti.

+0

Anurag, grazie per questa risposta – shabunc

+0

Di niente, e una domanda molto interessante. C'è una ragione specifica per cui vuoi controllare la * vividezza * dell'oggetto? Se la ragione è buona e risolve problemi autentici, potrebbe anche proporla agli autori delle specifiche di w3. – Anurag

+0

'document.querySelectorAll' restituisce un' StaticNodeList', che per definizione non è "live". Indipendentemente dal fatto che non siamo in grado di interrogare 'NodeList', mi chiedo se è sicuro assumere' NodeList', per convenzione, è * sempre * vivo. –

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

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

(in FF/Chrome)

+1

questo è casuale, non definitivo.' document.getElementsByName ('link'). toString() == "[oggetto NodeList]" 'ed è attivo – chiliNUT