DOM相关大全
??????? }
??????? alert(msg);
??????? bodyElement.removeChild(imgElement);
????? }
?
属性的奇特之处
对于 DOM 来说属性有一些特殊的地方。一方面,属性实际上并不像其他元素或文本那样是元素的孩子,换句话说,属性并不出现在元素 “之下”。同时,属性显然和元素有一定的关系,元素 “拥有” 属性。DOM 使用节点表示属性,并允许通过元素的专门列表来访问属性。因此属性是 DOM 树的一部分,但通常不出现在树中。有理由说,属性和 DOM 树结构其他部分之间的关系有点模糊。
?
?
需要指出的是,attributes属性实际上是对节点类型而非局限于元素类型来说的。有点古怪,不影响您编写代码,但是仍然有必要知道这一点。
虽然也能使用属性节点,但通常使用元素类的方法处理属性更简单。其中包括:
getAttribute(name)返回名为name的属性值。?
removeAttribute(name)删除名为name的属性。?
setAttribute(name, value)创建一个名为name的属性并将其值设为value。?
这三个方法不需要直接处理属性节点。但允许使用简单的字符串属性设置和删除属性及其值。
文本节点
需要考虑的最后一种节点是文本节点(至少在处理 HTML DOM 树的时候如此)。基本上通常用于处理文本节点的所有属性都属于节点对象。实际上,一般使用nodeValue属性来访问文本节点的文本,如下所示:
var pElements = bodyElement.getElementsByTagName("p");
for (i=0; i<pElements.length; i++) {
?var pElement = pElements.item(i);
?var text = pElement.firstChild.nodeValue;
?alert(text);
}
少数其他几种方法是专门用于文本节点的。这些方法用于增加或分解节点中的数据:
appendData(text)将提供的文本追加到文本节点的已有内容之后。?
insertData(position, text)允许在文本节点的中间插入数据。在指定的位置插入提供的文本。?
replaceData(position, length, text)从指定位置开始删除指定长度的字符,用提供的文本代替删除的文本。?
?
?
?
什么节点类型?
到目前为止看到的多数代码都假设已经知道处理的节点是什么类型,但情况并非总是如此。比方说,如果在 DOM 树中导航并处理一般的节点类型,可能就不知道您遇到了元素还是文本。也许获得了p元素的所有孩子,但是不能确定处理的是文本、b元素还是img元素。这种情况下,在进一步的处理之前需要确定是什么类型的节点。
所幸的是很容易就能做到。DOM 节点类型定义了一些常量,比如:
Node.ELEMENT_NODE是表示元素节点类型的常量。?
Node.ATTRIBUTE_NODE是表示属性节点类型的常量。?
Node.TEXT_NODE是表示文本节点类型的常量。?
Node.DOCUMENT_NODE是表示文档节点类型的常量。?
还有其他一些节点类型,但是对于 HTML 除了这四种以外很少用到。我有意没有给出这些常量的值,虽然 DOM 规范中定义了这些值,永远不要直接使用那些值,因为这正是常量的目的!
nodeType 属性
可使用nodeType属性比较节点和上述常量 —— 该属性定义在 DOM node 类型上因此可用于所有节点,如下所示:
var someNode = document.documentElement.firstChild;
if (someNode.nodeType == Node.ELEMENT_NODE) {
?alert("We've found an element node named " + someNode.nodeName);
} else if (someNode.nodeType == Node.TEXT_NODE) {
?alert("It's a text node; the text is " + someNode.nodeValue);
} else if (someNode.nodeType == Node.ATTRIBUTE_NODE) {
?alert("It's an attribute named " + someNode.nodeName
??????????????????????? + " with a value of '" + someNode.nodeValue + "'");
}
这个例子非常简单,但说明了一个大问题:得到节点的类型非常简单。更有挑战性的是知道节点的类型之后确定能做什么,只要掌握了节点、文本、属性和元素类型提供了什么属性和方法,就可以自己进行 DOM 编程了