如何区分实时和非实时NodeList集合?

sha*_*unc 13 javascript collections dom nodelist

document.getElementsByTagName('div')和document.querySelectorAll('div')都返回NodeList集合.唯一的区别是第一种方法返回实时收集,第二种方法返回静态收集.

问题是 - 是否有机会仅通过检查这些对象来区分一个对象(即 - 不试图添加/删除一些项目来测试"活跃度")?

提前致谢

Anu*_*rag 6

NodeList接口是不可知的死或活的状态.

interface NodeList {
  Node item(in unsigned long index);
  readonly attribute unsigned long length;
};
Run Code Online (Sandbox Code Playgroud)

它只包含一个属性length和一个方法,item所以我担心目前无法确定一个对象是否存在而没有操纵DOM并看到效果.

  • 尽管如此,[最新版本](http://www.w3.org/TR/selectors-api/#queryselectorall)声明"querySelectorAll()方法返回的NodeList对象必须是静态的,而不是直播" - 这很奇怪因为NodeList本身被定义为实时的. (3认同)

小智 6

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

a.toString() == "[object NodeList]"
b.toString() == "[object HTMLCollection]"
Run Code Online (Sandbox Code Playgroud)

(在FF/Chrome中)