DOM下的节点属性和操作

DOM(文档对象模型)是由W3C制定的一套访问和操作XML(eXtensible Markup Language)文档的标准,即API。比如DOM告诉JavaScript引擎如何在浏览器窗口中显示和操作XML创建的标记(Tag)。

DOM与特定的平台、浏览器、语言无关,很多种语言都实现了DOM,比如JavaScript和PHP都实现了DOM,所以 JavaScript中有getElementsByTagName()方法,PHP中也有 getElementsByTagName(),getElementsByTagName()方法是DOM规定的访问XML文档的接口。

XML与HTML相似,但两者是有区别。XML和HTML都来自于SGML,它们都含有标记,有着相似的语法,HTML和XML的最大区别在于:HTML是一个定型的标记语言,用固定的标记来描述和显示数据,比如<h1>表示首行标题,有固定的尺寸;而XML没有固定的标记,只能通过自定义的标记来描述数据的形式和结构,而不能显示。HTML是将数据 和显示混在一起,而XML则是将数据和显示分开来。那为什么能使用DOM访问和操作HTML文档(即网页)呢?Web语义化的一个发展方向是将HTML逐渐演变为更有语义、能将数据内容与现实分离的XML,但HTML不可能立即演变为XML,目前推荐使用的是一个过渡产物——XHTML。HTML与 XHTML网页形成的节点树在结构上与XML节点树一样,可以看做是一个符合DOM的XML文档,因此可以使用实现了DOM的程序语言来访问和操作HTML文档,即访问和操作那些节点,节点树的结构如下图所示。

由于HTML与XML的相似性及差异,JavaScript不仅实现了标准的DOM方法和属性(即由W3C制定的),而且还实现了HTML特有的 DOM方法和属性,前者称为Core DOM,并不专属于JavaScript,后者称为HTML-DOM。不管是Core DOM还是HTML-DOM,我们在使用JavaScript的时候要注意浏览器之间的兼容性,因为不同的浏览器对这两类方法和属性的支持可能不一样。 这里不详谈Core DOM和HTML-DOM,以及跨浏览器兼容性,教材上都有详细描述。但一般推荐使用Core DOM方法和属性,尽管稍显繁杂。

常见的Core DOM属性和方法如下

属性:

1 .nodeName

节点名称,相当于tagName.属性节点返回属性名,文本节点返回#text。nodeName是只读的。

2 .nodeType

值:1,元素节点;2,属性节点;3,文本节点。nodeType是只读的。
3 .nodeValue
返回一个字符串,指示这个节点的值。元素节点返回null,属性节点返回属性值,文本节点返回文本。nodeValue可读可写,这是对元素节点不能写。一般只用于设置文本节点的值。
4 .childNodes
返回子节点数组。文本和属性节点的childNodes永远是null。可以用hasChildNodes()来判断是否有子节点。只读属性,要删除添加节点可不能用操作childNodes数组的办法呃。
5 .firstChild
返回第一个子节点。文本和属性节点没有子节点,会返回一个空数组,这是针对这二位的特殊待遇。对于元素节点,若是没有子节点会返回null.有一个等价式:firstChild=childNodes[0].
6 .lastChild
返回最后一个子节点。返回值同firstChild,三方待遇参考上面。有一个等价式:lastChide=childNodes[childNodes.length-1].
7 .nextSibling()
返回节点的下一个兄弟节点。如果没有下一个兄弟节点的话,返回null。只读属性,不可以更改应用。

8 .previousSibling()
返回节点的上一个兄弟节点。

9 .parentNode()
返回节点的父节点。document.parentNode()返回null,其他的情况下都将返回一个元素节点,因为只有元素节点拥有子节点,出了document外任何节点都拥有父节点。parentNode(),又是一个只读的家伙。

操作:

1. 创建节点
createElement('tagName');
如:var oP=document.createElement('p');创建了一个<p></p>标签。
2. 创建文本节点
createTextNode('text');
如:var oText=document.createTextNode('This is a paragh!');
3. 附加子节点
appendChild(o);其中o为节点对象。
如:document.body.appendChildNode(o);在body末尾追加
document.forms[0].appendChildNode(o);在form表单末尾追加
oP.appendChildNode(o);在元素内部的末尾追加,其总oP为节点对象。
4. 创建文档片断
createDocumentFragment();
如:var oF=document.createDocumentFragment();
5. 删除节点
removeChild(oP);
如:document.body.removeChild(oP),从body中移除oP节点对象。
6. 替换节点
replaceChid(newOp,targetOp);将目标节点targetOp替换为newOp
如:document.body.replayChild(oPa,oPb).ps:怎会这样特殊?源和目地操作数都是参数,为何调用者是document.body?记住先,别多管。——被替换的必须是body的子节点,可以用其他element替代document.body,前提一样,被替换的要是这个element的子节点。
7. 插入节点
insertBefor(newOp,targetOp);
insertAfter(newOp,targetOp);
8. 设置或得到属性节点 
setAttribute('key','value');
getAttribute('key','value')
9.复制节点。
cloneNode(true/false)

 

猜你喜欢

转载自blog.csdn.net/qq_41690927/article/details/89083423