2010-07-26 6 views
13

И document.getElementsByTagName ('div'), и document.querySelectorAll ('div') возвращают коллекцию NodeList. Единственное отличие состоит в том, что первый метод возвращает live-collection, а второй - статический.Как отличить коллекции живых и неживых NodeList?

Вопрос: есть ли возможность отличить один объект от другого только путем проверки этих объектов (т. Е. Не пытаться добавить/удалить некоторые элементы для проверки «живой»)?

заранее спасибо

ответ

6

Интерфейс NodeList является агностиком мертвого или живого статуса.

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

Он содержит только свойство length и метод item, так что я боюсь, что в настоящее время не представляется возможным определить, является ли объект жить без манипулирования DOM и видеть последствия.

+0

Анураг, спасибо за этот ответ – shabunc

+0

Вы долгожданная и очень интересный вопрос. Есть ли какая-то конкретная причина, по которой вы хотите проверить «живость» объекта? Если причина хорошая и решает настоящие проблемы, она может также предложить ее авторам спекуляций в w3. – Anurag

+0

'document.querySelectorAll' возвращает' StaticNodeList', который по определению не является «живым». Независимо от того, что вы не можете допросить 'NodeList', мне интересно, можно ли предположить, что' NodeList', по соглашению, всегда * live. –

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

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

(в FF/Chrome)

+1

это совпадение, а не окончательное.' document.getElementsByName ('link'). toString() == "[object NodeList]" 'и он в прямом эфире – chiliNUT

Смежные вопросы