2010-07-26 19 views
13

Tanto document.getElementsByTagName ('div') como document.querySelectorAll ('div') devuelven la colección NodeList. La única diferencia es que el primer método devuelve live-collection y el segundo, uno estático.¿Cómo distinguir entre colecciones NodeList activas y no vivas?

La pregunta es: ¿hay alguna posibilidad de distinguir un objeto de otro solo mediante la inspección de estos objetos (es decir, sin tratar de agregar/eliminar algunos elementos para probar "liveness")?

gracias de antemano

Respuesta

6

La interfaz NodeList es agnóstico de su estado muerto o vivo.

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

Sólo contiene una propiedad length, y un método item así que me temo que no es posible en la actualidad para determinar si un objeto está vivo sin manipular el DOM y ver los efectos.

+0

Anurag, gracias por esta respuesta – shabunc

+0

De nada, y una pregunta muy interesante. ¿Hay alguna razón específica por la que desee inspeccionar el * liveness * del objeto? Si la razón es buena y resuelve problemas reales, también podría proponerla a los autores de las especificaciones en w3. – Anurag

+0

'document.querySelectorAll' devuelve un' StaticNodeList', que por definición no es "en vivo". Independientemente de no poder interrogar a 'NodeList', me pregunto si es seguro asumir que' NodeList', por convención, es * always * live. –

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

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

(en FF/cromo)

+1

esto es coincidencia, no definitivo. document.getElementsByName ('link'). toString() == "[object NodeList]" 'y está en vivo – chiliNUT

Cuestiones relacionadas