/*
code ref http://www.cnblogs.com/rubylouvre/archive/2009/10/14/1583523.html
IE有contains方法。如果A元素包含B元素,则返回true,否则false。唯一不支持这个方法的是firefox。
不过火狐支持compareDocumentPosition() 方法,这是W3C制定的方法,标准浏览器都支持。
它的使用形式与contains差不多,但返回的不是一个布尔值,而是一个很奇怪的数值,它是通过如下方式累加计算出来的:
二进制 数值 含义
000000 0 元素一致
000001 1 节点在不同的文档(或者一个在文档之外)
000010 2 节点 B 在节点 A 之前
000100 4 节点 A 在节点 B 之前
001000 8 节点 B 包含节点 A
010000 16 节点 A 包含节点 B
100000 32 浏览器的私有使用
A.compareDocumentPosition(B);//B与A不相连,B在A的后面,B被A包含 4+16 = 20
B.compareDocumentPosition(A);//A与B不相连,A在B的前面,A包含B 2+8 = 10
*/
//PPK给出如下解决方法。
if (window.Node && Node.prototype && !Node.prototype.contains) {
Node.prototype.contains = function (arg) {
return !!(this.compareDocumentPosition(arg) & 16);//位运算 小于16结果为0
}
}
//2011.9.24 by 司徒正美
var contains = function(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;
}
分享到:
相关推荐
3. 使用:然后,你可以像使用原生`buffer.includes()`一样来调用`bufferIncludes`,如`const contains = bufferIncludes(buffer, searchValue)`。 总结来说,`buffer.includes()` ponyfill是为了解决老版本Node.js...
在JavaScript编程语言中,`contains`方法是一种常用的字符串操作技巧,用于判断一个字符串是否包含另一个子字符串。在标准的JavaScript库中,并没有直接提供`contains`方法,但是开发者可以通过自定义函数来实现这一...
Document.prototype.contains = function(node) { return !!(this.compareDocumentPosition(node) & 16); }; } ``` 这段代码首先检查`document.documentElement`(文档的根元素)是否已经包含了`contains`方法。...
- **Node.contains(node)**: 返回一个布尔值,表示参数节点是否为当前节点的后代节点。 - **Node.compareDocumentPosition(node)**: 返回一个 7 个比特位的二进制值,表示参数节点和当前节点的关系。 - **Node....
7. **Node.contains(node)**: 返回一个布尔值,表示参数节点是否为当前节点的后代节点。 8. **Node.compareDocumentPosition(node)**: 返回一个 7 位的二进制值,表示参数节点和当前节点的关系。 9. **Node....
This repo contains a Docker image and instructions to run a node 8 app version in AWS Lambda with Apex Up
组合电路设计是数字电子学中的一个核心概念,它涉及到如何构建和分析仅依赖于当前输入信号的电路系统,而不考虑任何历史输入或状态。在给定的文档中,标题和描述都聚焦于“组合电路的设计”,这是一个关键的主题,...
简单队列Node.js 的简单内存队列。 它可以被远程客户端访问。安装通过节点上的 npm: npm install simplequeue从您的程序中引用它: var simplequeue = require ( 'simplequeue' ) ;本地使用创建队列,放置和获取...
public bool Contains(TKey key) { return FindNode(_root, key) != null; } private TreeNode, TValue> FindNode(TreeNode, TValue> node, TKey key) { if (node == null || key.Equals(node.Key)) return...
While conceptually simple, this programming model contains numerous subtleties and be- haviors that are de ned implicitly by the current Node.js implementation. This paper presents the rst ...
NW.js 可以让你直接在 DOM 上调用所有 Node.js 模块,相当于使用一种新的方法来编写 Web 应用。NW.js 的前身是 node-webkit 。... (suppose the current directory contains 'package.json') 标签:NWjs
node-html2enml 是一个 node.js 模块,用于将 HTML 转换为 Evernote ENML。 ...用法 ...从 node.js 脚本调用 html2enml 如下: ... // base_uri contains uri to be prepended to convert relative URLs to absolu
JavaScript DOM 学习笔记 ...DOM 将文档表示为一个树状结构,其中每个节点都代表...* 是否包含节点(contains()):检测某节点是否包含另一个节点 这些方法可以用于操作和处理 DOM 节点,从而实现对文档的操作和修改。
这里使用了`Node.contains()`方法来判断点击事件的目标是否在当前下拉菜单内。 - `onMounted`和`onUnmounted`是Vue 3中的生命周期钩子,分别在组件挂载和卸载时执行,用于添加和移除全局的点击事件监听器。 最后,...
Beanstalk API 的 Node.js 包装器 这是一个正在进行的工作! 目前只有“获取”功能可用。 安装 npm install beanstalk 用法 // Create an API token: https://ACCOUNTNAME.beanstalkapp.com/access_tokens var bean...
├── /config/ # This directory contains all configuration files │ ├── /env/ # Environment depending configs go here in respective files │ ├── /routes/ # All api route declarations go here. ...
一个简单的 node.js 模块,有助于将命名参数添加到节点应用程序调用 安装 npm install named-argv 用法 您可以对命名参数使用“--”和“-”前缀: node myapp.js --opt1=value1 -opt2=value 您还可以传递未命名...
children.style.display = node.classList.contains('open') ? 'block' : 'none'; } } document.querySelectorAll('.tree-node').forEach(node => { node.addEventListener('click', () => toggleNode(node)); }...
`contains()`方法是一个在Node对象上定义的函数,可以用来检测一个DOM节点是否包含指定的子节点。它的语法如下: ```javascript node.contains(childNode) ``` 其中,`node`是可能的父节点,`childNode`是我们要...
visited.contains(node.left)) { queue.offer(node.left); visited.add(node.left); } if (node.right != null && !visited.contains(node.right)) { queue.offer(node.right); visited.add(node.right); } ...