DOM 节点关系

来源:互联网 发布:淘宝原创品牌 知乎 编辑:程序博客网 时间:2024/05/29 14:31

DOM1级定义了一个Node接口。

JavaScript中所有节点类型都继承自Node类型。

1.每个节点都有NodeType属性(节点的类型)。

Node类型中定义的12个数值常量:

Node.ELEMENT_NODE(1)Node.ATTRIBUTE_NODE(2)Node.TEXT_NODE(3)Node.CDATA_SECTION_NODE(4)Node.ENTITY_REFERENCE_NODE(5)Node.ENTITY_NODE(6)Node.PROCESSING_INSTRUCTION_NODE(7)Node.COMMENT_NODE(8)Node.DOCUMENT_NODE(9)Node.DOCUMENT_TYPE_NODE(10)Node.DOCUMENT_FRAGMENT_NODE(11)Node.NOTATION_NODE(12)

确定节点类型的方法:

if(someNode.nodeType==Node.ELEMENT_TODE){ //在IE中无效---IE没有公开Node类型的构造函数

alert("Node is an element");

}

if(someNode.nodeType==1){//适用于所有浏览器

alert("Node is a element");

}

2.每个节点都有一个childNodes属性,保存着一个NodeList对象(一种类数组对象)->保存一组有序节点。

NodeList对象是基于DOM结构动态执行查询的结果,因此DOM结构的变化能够自动反映在NodeList对象中。

NodeList是有生命,有呼吸的对象,而不是在我们第一次访问他们的某个瞬间拍摄下来的一张快照。

如何访问保存在NodeList中的节点:

(1)方括号  (2)item()方法

var firstChild = someNode.childNodes[0];

var secondChild = someNode.childNodes.item(1);

var count  = someNode.childNodes.length;

将NodeList转换为数组:

function convertToArray(nodes){

var array = null;

try{

array = Array.prototype.slice.call(nodes,0);   //针对非ie浏览器

}catch(ex){

array = new Array();

for(var i=0,len = nodes.length;i<len;i++){

array.push(nodes[i]);

}

}

return array;

}

3.每个节点都有一个parentNode

4.通过使用列表中每个节点的previousSibling和nextSibling属性,可以访问同一列表中的其他节点。

if(someNode.previousSibling==null){

alert("first node in the parent's childNodes list");

}else if(someNode.nextSibling==null){

alert("last node in the parent's childeNodes list");

}

父节点的firstChild和lastChild属性分别指向其childNodes列表的第一个节点和最后一个节点。

hasChildNodes() 返回true false

所有节点都有的属性:ownerDocument,指向整个文档的文档节点。这种关系表示任何节点都属于他所在的文档,任何节点都不能同时存在于两个或更多个文档中。通过这个属性,我们可以直接访问文档节点,不必层层回溯到达顶端。





0 0