JS中判断2个节点在DOM结构位置

本文探讨了在不同浏览器中使用DOM操作判断节点位置的方法,包括IE中的`contains`属性和FF中的`compareDocumentPosition`函数,解释了如何通过位运算理解节点之间的包含和前后关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在IE中使用内置的contains 来判断节点是否在某容器中

ex:

document.documentElement.contains(document.body)   === true

document.body.contains(document.documentElement)   === false

 

但在FF下没有此属性,为了兼容FF推出compareDocumentPosition这个东西但这个只返回一个数值:

 

A.compareDocumentPosition(B)


详细数据列表( 出自url:http://apps.hi.baidu.com/share/detail/31239672 ):

Bits          Number        Meaning
000000         0              元素一致
000001         1              节点在不同的文档(或者一个在文档之外)
000010         2              节点 B 在节点 A 之前
000100         4              节点 A 在节点 B 之前
001000         8              节点 B 包含节点 A
010000         16            节点 A 包含节点 B
100000         32            浏览器的私有使用

 

ex:

1.  

     1>document.documentElement.compareDocumentPosition(document.body) === 20

     2>document.body.compareDocumentPosition(document.documentElement) === 10

 

解释下:


     1>body在html里面所以有16,然后html在body前面(我理解的是<html>..<body>)所以有4,故加起来就是20.

     2>html在body里面所以有8,然后body在html后面(我理解的是<html>..<body>)所以有2,故加起来就是10.

 

2.  

      1>document.body.compareDocumentPosition(document.getElementsByTagName("head")[0]) === 2

      2>document.getElementsByTagName("head")[0].compareDocumentPosition(document.body) === 4

 

解释下:

 

    head和body没有包含关系(理解为同一级别)所以是0,而head在body的前面,所以有个2,故加起来就是2.

    head和body没有包含关系(理解为同一级别)所以是0,而body在head的后面,所以就是4,故加起来就是4.

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值