文档结构和遍历
一旦从文档选取了一个元素,有时需要查找文档中与之在结构上相关的部分(父亲、兄弟和子女)。文档从概念上可以看做是一棵节点对象树。节点类型定义了遍历该树所需的属性。另一个API允许文档作为元素对象树来遍历。
作为节点树的文档
Document对象、它的Element对象和文档中表示文本的Text对象都是Node对象。Node定义了以下重要的属性:
parentNode
该节点的父节点,或者针对类似Document对象应该是null,因为它没有父节点。
childNodes
只读的类数组对象(NodeList对象),它是该节点的实时表示。
firstChild、lastChild
该节点的子节点中的第一个和最后一个,如果该节点没有子节点则为null。
nextSibling、previoursSibling
该节点的兄弟节点中的前一个和下一个。及诶单的顺序反映了它们在文档中出现的顺序。
nodeType
该节点类型。9代表Document节点,1代表Element节点,3代表Text节点,8代表Comment节点,11代表DocuemntFragment节点。
nodeValue
Text及诶单或Comment节点的文本内容。
nodeName
元素的标签名,以大写形式表示。
但请注意,该API对文档文本的变化及其敏感。
作为元素树的文档
将文档看作是Element对象树,忽略部分文档:Text和Comment节点。
该API的第一部分是Element对象的children属性。它也是一个NodeList对象,但不同的是children列表只包含Element对象。children并非标准属性,但是它在所有当前的浏览器中都能工作。
注意,Text和Comment节点没有children属性,Node.parentNode属性不可能返回Text或Comment节点。任何Element的parentNode总是另一个Element,或者,追溯到树根的Document或DocumentFragment节点。
基于元素的文档遍历API的第二部分是Element属性,后者类似Node对象的子属性和兄弟属性:
firstElementChild,lastElementChild
类似 firstChild和lastChild,但只代表子Element。
nextElementSibling,previousElementSibling
类似nextSibling和previousSibling,但只代表兄弟Element。
childElementCount
子元素的数量。返回的值和children.length值相等。
属性
HTML元素由一个标签和一组称为属性的名值对组成。DOM还定义了另外一个API来获取或设置XML属性值和非标准的HTML属性。
HTML 属性作为Element的属性
表示HTML文档元素的HTMLElement随想定义了读/写属性,它们反映了元素的HTML属性。
获取和设置非标准HTML属性
Element类型还定义了getAttriute()和setAttribute()方法来查询和设置非标准的HTML属性,也可用来查询和设置XML文档中元素上的属性。
Element类型还定义了两个相关的方法,hasAttribute()和removeAttribute(),它们用来检测命名属性是否存在和完全删除属性。当属行为布尔值时这些方法特别有用:有些属性(如HTML的表单元素的disabled属性)在一个元素中时候存在是重点关键,而其值却无关紧要。
如果操作包含来自其他命名空间中属性的XML文档,可以使用这4个方法的命名空间版本:getAttributeNS()、setAttributeNS()、hasAttributeNS()和removeAttributeNS()。这些方法 需要两个属性名字符串作为参数。第一个标识命名空间 的URI,第二个通常是属性的本地名字,在命名空间中是无效的。
数据集属性
HTML5中,任意以“data-”为前缀的小写的属性名字都是合法。
HTML5还在Element对象上定义了dataset属性。该属性指代一个对象,它的各个属性应于去掉前缀的data-属性。带连字符的属性对应于驼峰命名法属性名:data-jquery-test属性就变成dataset.jqueryTest属性。
作为Attr节点的属性
Node类型定义了attributes属性。针对非Element对象的任何节点,该属性为null。对于Element对象,attributes属性是只读的类数组对象,它代表元素的所有属性。它可以用数字索引访问,可以枚举元素的所有属性。并且,它也可以用属性名索引。