DOM扩展及DOM2、DOM3

尽管DOM作为API已经非常完善了,但为了实现更多的功能,仍然会有一些标准或专有的扩展。W3C着手将一些已经称为事实标准的专有扩展标准化并写入规范当中。

选择符API

众多JavaScript库中最常用的一项功能,就是根据CSS选择符选择与某个模式匹配的DOM元素。jquery的核心就是通过选择符查询DOM文档取得元素的引用,从而抛开了getElementById()和getElementByTagName()。Selectors API致力于让浏览器原生支持CSS查询,这样一来,解析和树查询操作可以在浏览器内部通过编译后的代码来完成,极大地改善了性能。其核心方法有querySelector(“img.button”)和querySelectorAll(“#myDiv”),分别返回匹配的第一个元素和全部元素。
Selectors API Level2规范为Element类型新增了一个方法matchesSelector()。这个方法接收了一个参数,即CSS选择符,匹配则返回true。

元素遍历

对于元素间的空格,IE9及之前的版本不会返回文本节点,而其他浏览器都会返回文本节点。为了弥补此差异,Element Traversal API为DOM添加了5个属性:childElementCount、firstElementChild、lastElementChild、previousElementSibling、nextElementSibling。利用这些元素就不必担心空白文本节点。

HTML5

与类相关的扩充

  • getElementByClassName()方法。接收一个参数,包含一个或多个类名的字符串,类名的先后顺序不重要。返回带有指定类的所有元素的NodeList。
  • classList属性。是新集合类型DOMTokenList的实例。包含一个元素的类名列表。有方法:add() contains() remove() toggle()(如果已经存在,删除,如果没有,添加)。

焦点管理

document.activeElement属性,始终引用DOM中当前获得了焦点的元素。元素获得焦点的方式有页面加载、用户输入和在代码中调用focus()方法。

HTMLDocument的变化

  • document.readyState属性,有两个可能值:loading和complete,分别表示正在加载文档和已经加载完文档。
  • head属性。HTML5新增了document.head属性,引用文档的<\head>元素。

自定义数据属性

HTML5规定可以为元素添加非标准的属性,但要添加前缀data-,目的是为元素提供与渲染无关的信息。

innerHTML属性和outerHTML属性

  • innerHTML属性:在读模式下,innerHTML属性返回与调用元素的所有子节点对应的HTML标记。
  • outerHTML属性:在读模式下,outerHTML属性返回调用它的元素及所有子节点的HTML标记。
  • insertAdjacentHTML()方法。在特定的位置插入HTML文本。
  • 使用以上方法替换子节点可能会导致浏览器的内存占用问题。所以要避免频繁使用以上方法。

专有扩展

文档模式

页面的文档模式决定了可以使用什么功能。即,文档模式决定了可以使用哪个级别的CSS,可以在JavaScript中使用那些API,以及如何对待文档类型(doctype)。

children属性和contains()方法

  • children属性,是HTMLCollection的实例,只包含元素中同样还是元素的子节点。除此外,children属性与childNodes没有什么区别。
  • contains()方法:用于检测某个节点是不是另一个节点的后代,是则返回true

插入文本

  • innerText属性。操作元素中包含的所有文本内容,包括子文档书中的文本。会去掉元素内容
  • outerText属性。作用范围扩大到调用它的节点。在写模式喜爱,outerText会替换掉整个元素,包括子节点。

DOM2和DOM3

DOM1级主要定义的是HTML和XML文档的底层结构。DOM2和DOM3级则在这个结构的基础上引入了更多的交互能力,也支持了更高级的XML特性。DOM2和DOM3分为了许多模块,分别描述了DOM的某个非常具体的子集。

  • DOM2级核心:在1级核心基础上构建,为节点添加了更多方法和属性。
  • DOM2级视图:为文档定义了基于样式信息的不同视图。
  • DOM2级事件:说明了如何使用事件与DOM文档交换。
  • DOM2级样式:定义了如何以编程方式来访问和改变CSS样式信息。
  • DOM2级遍历和范围:引入了遍历DOM文档和选择其特定部分的新接口。
  • DOM2级HTML:在1级HTML基础上构建,添加了更多属性、方法和新接口。