两个节点之间的关系以及如何在节点之间任意移动

两个节点间的关系

包含与被包含关系

  父级属性:parentNode, parentElement.

  子级属性:childNodes, children, childElementCount, firstChild, lastChild, firstElementChild, lastElementChild

同辈

  兄弟节点:nextSibling, previousSibiling, nextElementSibling, previousElementSibling

关系方法:

Node.contains()

返回一个布尔值,来表示传入的节点是否为调用节点的后代,或者是Node节点本身。

IE和Safari不支持document.contains()方法,只支持元素节点的contains()方法

Node.compareDocumentPosition(othernode)

比较当前节点与其他节点的位置关系,返回结果如下:

0同一节点
1没有关系,两个节点不在同一文档中
2othernode 在 node 之前
4othernode 在 node 之后
8othernode 包含 node
16othernode 被 node 包含
32没有关系,或是两个节点是同一元素的两个属性

注释:返回值可以是值的组合。例如,返回 20 意味着在 othernode 在 node 内部(16),并且 othernode 在 node 之后(4)。

<div id="box">
    <div id="inner"></div>
</div>
<script>
    var box = document.getElementById('box')
    var inner = document.getElementById('inner')
    console.log(box.compareDocumentPosition(inner))
    //inner被box包含(16),inner在box后面(4) ,16+4=20
    console.log(inner.compareDocumentPosition(box))
    //box包含inner(8),box在inner之前(2),8+2=10
</script>

 

Node.hasChildNodes()

返回一个布尔值,表明当前节点是否含有子节点

<div id="box">
    <div id="inner"></div>
</div>
<script>
    console.log(box.hasChildNodes())    //true
    console.log(inner.hasChildNodes())  //false
</script>

三种可以判断当前节点是否含有子节点的方法:

  node.hasChildNodes()

  node.firstChild !== null

  node.ChildNodes.length > 0

Node.isSameNode()和Node.isEqualNode()

same,指的是两个节点是同一个节点

equal,指的是两个节点类型/属性/子节点都一样。

<div id="box">
    <p class="inner">123</p>
    <p class="inner">123</p>
    <p class="inner" id="inner"></p>
</div>
<script>
    var inners = document.getElementsByTagName('p')
    var inner = document.getElementById('inner')
    console.log(inners[0].isEqualNode(inners[1]))   //true  两个节点完全相同
    console.log(inners[0].isEqualNode(inners[2]))   //false 属性不同。
    console.log(inners[0].isSameNode(inners[1]))    //false 不是同一个节点
    console.log(inners[2].isSameNode(inner))        //true  同一个节点
</script>

注意:isSameNode()已在DOM Level4中被废弃。可使用node1 === node2来代替

属性对比

parentNode与parentElement

parentNode返回指定元素在DOM树上的父节点,可能是一个元素节点、一个文档节点、或者是个文档碎片节点。

parentElement返回指定元素的父元素节点,如果没有父节点,或者父节点不是一个DOM元素,则返回null。(在IE浏览器中,只有元素节点才有该属性。其他浏览器则是所有类型的节点都有该属性)

    <div id="box"></div>
    <script>
        var box = document.getElementById('box')

        console.log(box.parentNode)                             //body
        console.log(document.body.parentNode)                   //html
        console.log(document.documentElement.parentNode)        //document
        console.log(document.parentNode)                        //null

        console.log(box.parentElement)                          //body
        console.log(document.body.parentElement)                //html
        console.log(document.documentElement.parentElement)     //null html元素没有父元素节点
        console.log(document.parentNode)                        //null
    </script>
childNodes/children/childElementCount

childNodes返回子节点集合,只读的NodeList对象

children返回子元素集合,只读的HTMLCollection对象

<div id="box">
    <div>
        123
    </div>
</div>
<script>
    var box = document.getElementById('box')
    console.log(box.childNodes)
    console.log(box.children)
</script>

 

childElementCount返回给定元素的子元素数,等于children.length

 元素的移动

添加元素节点:appendChild()

插入元素节点:insertBefore()

移除元素节点:removeChild()

复制元素节点:cloneNode()

转载于:https://www.cnblogs.com/lianglanlan/p/9842943.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值