dom节点树、dom节点关系

目录

一、dom节点树

遍历文档节点树

遍历元素节点树

二、dom节点关系

节点属性

父级属性

子级属性

同级属性

节点方法


一、dom节点树

根据w3c的dom标准,文档中的所有内容都是节点,节点是dom的最小组成单元。浏览器会根据dom模型将文档解析成一系列节点,这些节点组成一个树状结构,称为dom节点树。dom节点树体现了文档的层次结构。dom节点树有两种类型,其一dom文档节点树,其二dom元素节点树,dom文档节点树包含文档中所有类型的节点,dom元素节点树只包含元素节点。

遍历文档节点树

遍历所有Node节点。遍历dom文档节点树的方法兼容于所有浏览器。

1、parentNode
2、childNodes
3、firstChild
4、lastChild
5、nextSibling
6、previousSibling
//兼容写法获取前一个元素节点
function previousElem(elem){
    var ret = elem && elem.previousSibling;
    if(ret && ret.nodeType != 1){
        ret = previousElem(ret);
    }
    return ret;
}

遍历元素节点树

遍历元素节点,其余类型的节点忽略。除了children方法外其余方法在ie8及以下版本的浏览器中都不兼容。

1、parentElement
2、children
3、childElementCount
4、firstElementChild
5、lastElementChild
6、nextElementSibling
7、previousElementSibling

二、dom节点关系

dom将文档解析成一个由多层次节点构成的结构即dom结构。节点是dom结构的基础。dom节点包含12种类型,每种类型的节点分别表示文档中不同的信息及标记。节点之间的关系构成了层次,整个文档表现为一个以特定节点为根节点的树形结构。节点关系类似于传统的家族关系,节点树相当于家谱。

节点属性

dom节点的关系属性都是只读的。

父级属性

parentNode

每个节点都有一个parentNode属性,该属性指向当前节点在节点树中的父节点。对于一个节点来说,它的父节点只可能为三种类型,分别是元素节点、文档节点和文档片段节点。如果父节点不存在,则返回null。

parentElement

与parentNode属性不同的,该属性指向当前节点在节点树中的父元素节点。ie浏览器中只有元素节点有该属性,其它浏览器中所有类型的节点都有该属性。

<div>
    <strong></strong>
    <span></span>
</div>
<script>
    var strong = document.getElementsByTagName("strong")[0]; 
    console.log(strong.parentElement);    
</script>

子级属性

childNodes

childNodes返回一个只读的NodeList集合,保存着当前节点的第一层子节点。

<div>
    123
    <--注释-->
    <strong></strong>
    <span></span>
</div>
<script>
    var div = document.getElementsByTagName("div")[0]; 
    console.log(div.childNodes);    
    //NodeList(7) [text, comment, text, strong, text, span, text]
    //返回7个子节点,text表示文本节点,comment是注释节点
</script>

children

children返回一个只读的HTMLCollection集合,保存着当前节点的第一层子元素节点。

<div>
    <strong></strong>
    <span></span>
</div>
<script>
    var div = document.getElementsByTagName("div")[0]; 
    console.log(div.children); //HTMLCollection(2) [strong, span]    
</script>

childElementCount

返回当前节点下子元素节点的个数,相当于children.length。ie8及以下版本的浏览器中不兼容。

<div>
    <strong></strong>
    <span></span>
</div>
<script>
    var div = document.getElementsByTagName("div")[0]; 
    console.log(div.childElementCount); //2 
</script>

firstChild

当前节点的第一个子节点。ie8及以下版本浏览器忽略空白文本节点。

lastChild

当前节点的最后一个子节点。ie8及以下版本浏览器忽略空白文本节点。

<div>
    123
    <!--注释-->
    <strong></strong>
    <span></span>
</div>
<script>
    var div = document.getElementsByTagName("div")[0]; 
    console.log(div.firstChild); //"    123    " --> 文本节点
    console.log(div.lastChild);  //#text --> 空文本节点
</script>

firstElementChild

当前节点的第一个元素节点。ie8及以下版本浏览器不兼容。

lastElementChild

当前节点的最后一个元素节点。ie8及以下版本浏览器不兼容。

同级属性

nextSibling

当前节点的后一个兄弟节点。ie8及以下版本浏览器忽略空白文本节点。

previousSibling

当前节点的前一个兄弟节点。ie8及以下版本浏览器忽略空白文本节点。

<div>
    123
    <!--注释-->
    <strong></strong>
    <span></span>
</div>
<script>
    var div = document.getElementsByTagName("strong")[0]; 
    console.log(div.nextSibling);      //#text
    console.log(div.previousSibling);  //#text 
</script>

nextElementSibling

当前节点的后一个兄弟元素节点。ie8及以下版本浏览器不兼容。

previousElementSibling

当前节点的前一个兄弟元素节点。ie8及以下版本浏览器不兼容。

节点方法

hasChildNodes()

判断当前节点是否包含子节点,包含一个或多个子节点时返回true。子节点可以是任意类型。

contains()

contains方法接受一个节点作为参数,返回一个布尔值,表示参数节点是否为当前节点的后代节点。参数为后代节点即返回true,不一定是第一层子节点。ie和safari不支持document.contains()方法,只支持元素节点的contains()方法。

<div id="d1">
    <span id="s1"></span>
    <span id="s2"></span>
</div>
<script>
    console.log(d1.contains(s1)); //true
    console.log(s1.contains(s2)); //false
</script>

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值