我的编程空间,编程开发者的网络收藏夹
学习永远不晚

一文详解Node.contain 函数兼容处理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

一文详解Node.contain 函数兼容处理

前言

好久不写文章了,都不知道跟大家怎么打招呼了,新的一年开始,也应该收心,做一些文字的记录以及分享了。

先说下写这篇文章的由来吧,接到一个需求需要在项目中实现一个效果,就是点击其他区域隐藏dom的操作,试了很多的方式,感觉都不是特别合理,所以针对当前需求做了一个方法的实现,使用dom原生方法 contains进行判断当前点击的元素是否是指定父级的子级,然后进行判断是否隐藏指定元素。

具体业务逻辑方法就不在这里赘述了,主要讲下contains方法。

contains方法

Node 接口的 contains()  方法返回一个布尔值,表示一个节点是否是给定节点的后代,即该节点本身、其直接子节点(childNodes)、子节点的直接子节点等。

参数

otherNode

要测试的节点。

备注:  otherNode 不是可选的,但是可以设置为 null

返回值

返回一个布尔值,如果 otherNode 包含在节点中会返回 true,否则返回 false

如果 otherNode 参数为 null,则 contains() 始终返回 false

示例

下面的函数用来检查一个元素是否是 body 元素的后代元素。由于 contains 会包含元素自身,而确定 body 是否包含自身不是设计 isInPage 的意图,这种情况明确返回 false

function isInPage(node) {
  return (node === document.body) ? false : document.body.contains(node);
}

规范

Specification
DOM Standard # ref-for-dom-node-contains①

浏览器兼容性

Report problems with this compatibility data on GitHub

desktopmobile
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung InternetWebView Android
contains16Toggle history12Toggle history9Toggle history7Toggle history1.1Toggle history18Toggle history9Toggle history10.1Toggle history1Toggle history1.0Toggle history4.4Toggle history

兼容处理

因为是原生方法,兼容性有限,所以针对公司的项目兼容需求,还需要进行兼容处理。具体代码如下:

const contains = (root, el) => {
    if (root.compareDocumentPosition) return root === el || !!(root.compareDocumentPosition(el) & 16);
    if (root.contains && el.nodeType === 1) {
        return root.contains(el) && root !== el;
    }
    while ((el = el.parentNode)) if (el === root) return true;
    return false;
};

这段代码实现了一个检测节点是否存在于指定容器中的函数contains,其中使用了三种不同的方式进行判断:

  • 如果浏览器支持compareDocumentPosition方法,则直接使用该方法进行判断。首先判断root节点是否等于el节点,如果是,则返回true;否则,使用compareDocumentPosition方法判断el节点是否在root节点中,如果结果为16,则返回true,否则返回false
  • 如果浏览器不支持compareDocumentPosition方法,但支持contains方法,则判断el节点是否是一个元素节点(nodeType为1),如果是,则使用contains方法判断el节点是否在root节点中,并且root节点不等于el节点,如果满足,则返回true,否则返回false
  • 如果浏览器既不支持compareDocumentPosition方法,也不支持contains方法,则使用while循环遍历el节点的所有祖先节点,判断是否有节点等于root节点,如果有,则返回true,否则返回false

综合三种方式,可以实现在各种浏览器中兼容检测节点是否存在于指定容器中的功能。

总结

方法整体的实现难度不是很大,就是针对当前原生方法的不支持的内容进行补充,

以上就是一文详解Node.contain 函数兼容处理的详细内容,更多关于Node.contain 函数兼容的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

一文详解Node.contain 函数兼容处理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

一文详解Node.contain 函数兼容处理

这篇文章主要为大家介绍了Node.contain 函数兼容处理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-08

Node.contain函数兼容处理的方法是什么

本文小编为大家详细介绍“Node.contain函数兼容处理的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node.contain函数兼容处理的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-07-05

一文详解TDSQL PG版Oracle兼容性实践

TDSQL PG版分布式关系型数据库,是一款同时面向在线事务交易和MPP实时数据分析的高性能HTAP数据库系统。面对应用业务产生的不定性数据爆炸需求,不管是高并发交易还是海量实时数据分析,TDSQL PG版都能够轻松处理。目前TDSQL PG版已经在金融、保险
一文详解TDSQL PG版Oracle兼容性实践
2016-12-12

Mysql空值处理函数详解

目录前言NULL Values (空值)定义测试IFNULL定义COALESCE定义对比:总结前言mysql中,空值通常用于表示缺失或未定义的值。处理空值的关键在于理解空值与其他值之间的关系,以及如何使用不同的SQL函数来处理和转换空值。
2023-08-07

一文详解Golang的函数特性

函数是 Golang 中非常重要的组成部分之一,它们提供了代码的可重用性和组织性。在本文中,我们将深入了解 Golang 函数的多个方面,希望对大家有所帮助
2023-05-18

一文详解如何在MySQL中处理JSON数据

目录前言1. mysql中的jsON数据类型2. JSON函数和运算符3. 创建JSON列的表4. 插入JSON数据5. 查询JSON数据6. 复杂查询和聚合7. JSON 数据的索引8. 总结前言在当今的大数据时代,JSON(JavaS
一文详解如何在MySQL中处理JSON数据
2024-08-19

一文详解C++11中的lambda函数

小编可以明确告诉大家:lambda函数是C++11中最重要的,使用最广泛的,最具现代风格的内容,lambda函数的出现改变了C++编程的思维方式。所以快和小编学习一下C++11中lambda函数的使用吧
2023-02-07

一文详解Spring构造函数推断

这篇文章主要介绍了Spring构造函数推断自动注入及底层原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加
2023-05-14

C++ 成员函数详解:对象方法的容器兼容性和迭代器支持

成员函数是定义在类上下文中,与对象相关联的函数,可访问对象数据和方法。为了使其与容器兼容,自定义类必须提供赋值运算符、相等和不相等运算符、比较运算符。此外,为了支持迭代器,类应提供返回指向容器起始和终止元素迭代器的 begin() 和 en
C++ 成员函数详解:对象方法的容器兼容性和迭代器支持
2024-04-29

一文详解如何使用Golang处理文件

Golang是一种强类型、静态编译、并发性高的编程语言,我们将重点介绍Golang中的文件基本操作,包括创建文件与查看状态,重命名与移动,删除与截断,读写文件,以及权限控制,跟着小编一起来学习吧
2023-05-17

PHP文件缓存函数详解:file_get_contents、file_put_contents、unlink等函数的文件缓存处理方法

PHP文件缓存函数详解:file_get_contents、file_put_contents、unlink等函数的文件缓存处理方法,需要具体代码示例在Web开发中,我们经常需要从文件中读取数据或将数据写入到文件中。而且,在某些情况下,我们
PHP文件缓存函数详解:file_get_contents、file_put_contents、unlink等函数的文件缓存处理方法
2023-11-18

golang函数中错误处理机制详解

golang 函数中错误处理机制利用 error 类型和 error 标准接口来处理错误。错误类型可自定义,通过 error() 方法返回错误描述。错误处理机制包括显式错误(通过返回值传递错误)和隐式错误(通过 panic 终止函数)。显式
golang函数中错误处理机制详解
2024-05-03

详解Mongodb 多文档聚合操作处理方法(Map-reduce 函数)

目录聚合Map-reduce 函数示例:按客户统计示例:按日期统计聚合聚合操作处理多个文档并返回计算结果。您可以使用聚合操作来:将多个文档中的值分组在一起。对分组数据执行操作以返回单个结果。分析数据随时间的变化。要执行聚合操作,您可以
2023-08-07

PHP错误处理函数详解:try...catch、error_reporting、set_error_handler等函数的异常处理技巧

PHP错误处理函数详解:try...catch、error_reporting、set_error_handler等函数的异常处理技巧,需要具体代码示例当我们在开发PHP应用程序时,经常会遇到各种错误和异常。为了确保应用程序的稳定性和可靠性
PHP错误处理函数详解:try...catch、error_reporting、set_error_handler等函数的异常处理技巧
2023-11-18

Linux一行命令处理批量文件详解

前言最好的方法不一定是你最快能想到的。工作中针对临时使用的脚本不要求健壮,写出来越快越好。这里提供一种使用sed命令构造命令解决处理批量文件的技巧,供参考。 需求案例1将当前目录下所有的0_80_91.txt、0_80_92.txt、0_8
2022-06-04

编程热搜

目录