huankfy

明月出天山,苍茫云海间

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  12 随笔 :: 16 文章 :: 24 评论 :: 0 引用

公告

  今日在博客园看了一篇<javascript:像操作Array一样操作NodeList>,发现有些问题,后来查阅了W3C标准,发现其混淆了DOM中的NodeList和javascript的Array。

  NodeList和Array是不同的东西。NodeList是DOM中定义的一个辅助对象,而Array是程序语言定义的一个数据结构。

  NodeList是DOM中定义一个对象,在W3C文档中可以看到:

  The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.

  接口定义为:

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

  从上面的描述可以看到,W3C规定了NodeList的接口,如何实现依赖于各浏览器。现在各浏览器都实现了DOM,只是实现的Level不一样(DOM目前是Level3,Level3只有少部分浏览器支持其中的一部分功能)。

  所以,在实际编程中,不要把NodeList和Array对象混淆了。

  比如,在web编程中,可能我们会这么用:

1 var divDoms = document.getElementsTagName("div");
2 for(var index=0; i<divDom.length;i++)
3    // do something
4 

  当得到divDoms对象后,其上的操作就向Array一样,误以为其为Array,而实际是不同的东西。

  另外,脚本语言并不能直接操纵DOM,而需要通过BOM(Brower Object Module),才能与浏览器窗口进行交互。DOM是有一些列Node构成的,而BOM则是有一些列Object对象构成。

posted on 2010-07-08 18:53 huankfy 阅读(...) 评论(...) 编辑 收藏