`
caniggia1986
  • 浏览: 151714 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Node.contains

 
阅读更多
/*
 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;
}
分享到:
评论

相关推荐

    Node.js-Node.js`buffer.includes()`ponyfill

    3. 使用:然后,你可以像使用原生`buffer.includes()`一样来调用`bufferIncludes`,如`const contains = bufferIncludes(buffer, searchValue)`。 总结来说,`buffer.includes()` ponyfill是为了解决老版本Node.js...

    自定义____js中contains方法

    在JavaScript编程语言中,`contains`方法是一种常用的字符串操作技巧,用于判断一个字符串是否包含另一个子字符串。在标准的JavaScript库中,并没有直接提供`contains`方法,但是开发者可以通过自定义函数来实现这一...

    document.contains:用于`document.contains'的Polyfillshim

    Document.prototype.contains = function(node) { return !!(this.compareDocumentPosition(node) & 16); }; } ``` 这段代码首先检查`document.documentElement`(文档的根元素)是否已经包含了`contains`方法。...

    javascript 常用DomAPI总结

    - **Node.contains(node)**: 返回一个布尔值,表示参数节点是否为当前节点的后代节点。 - **Node.compareDocumentPosition(node)**: 返回一个 7 个比特位的二进制值,表示参数节点和当前节点的关系。 - **Node....

    前端面试题目整理

    7. **Node.contains(node)**: 返回一个布尔值,表示参数节点是否为当前节点的后代节点。 8. **Node.compareDocumentPosition(node)**: 返回一个 7 位的二进制值,表示参数节点和当前节点的关系。 9. **Node....

    Node.js-Node8inAWSLambdabyApexUp

    This repo contains a Docker image and instructions to run a node 8 app version in AWS Lambda with Apex Up

    Design of Combinational Circuit

    组合电路设计是数字电子学中的一个核心概念,它涉及到如何构建和分析仅依赖于当前输入信号的电路系统,而不考虑任何历史输入或状态。在给定的文档中,标题和描述都聚焦于“组合电路的设计”,这是一个关键的主题,...

    SimpleQueue:Node.js 的简单内存队列。 它可以从远程客户端使用

    简单队列Node.js 的简单内存队列。 它可以被远程客户端访问。安装通过节点上的 npm: npm install simplequeue从您的程序中引用它: var simplequeue = require ( 'simplequeue' ) ;本地使用创建队列,放置和获取...

    C# 二叉查找树

    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...

    Semantics of Asynchronous JavaScript

    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 ...

    Web调用Node模块NW.js.zip

    NW.js 可以让你直接在 DOM 上调用所有 Node.js 模块,相当于使用一种新的方法来编写 Web 应用。NW.js 的前身是 node-webkit 。... (suppose the current directory contains 'package.json') 标签:NWjs

    node-html2enml:用于 Node.js 的 HTML 到 ENML 转换器

    node-html2enml 是一个 node.js 模块,用于将 HTML 转换为 Evernote ENML。 ...用法 ...从 node.js 脚本调用 html2enml 如下: ... // base_uri contains uri to be prepended to convert relative URLs to absolu

    js DOM学习笔记11

    JavaScript DOM 学习笔记 ...DOM 将文档表示为一个树状结构,其中每个节点都代表...* 是否包含节点(contains()):检测某节点是否包含另一个节点 这些方法可以用于操作和处理 DOM 节点,从而实现对文档的操作和修改。

    【JavaScript源代码】vue3.0实现下拉菜单的封装.docx

    这里使用了`Node.contains()`方法来判断点击事件的目标是否在当前下拉菜单内。 - `onMounted`和`onUnmounted`是Vue 3中的生命周期钩子,分别在组件挂载和卸载时执行,用于添加和移除全局的点击事件监听器。 最后,...

    node-beanstalk:Beanstalk API 的 Node.js 包装器

    Beanstalk API 的 Node.js 包装器 这是一个正在进行的工作! 目前只有“获取”功能可用。 安装 npm install beanstalk 用法 // Create an API token: https://ACCOUNTNAME.beanstalkapp.com/access_tokens var bean...

    node-api-starter-kit:最小的轻量级入门套件,用于基于Node.js的API后端,并内置了对MySQL(使用Knex),Redis和Socket.io的支持

    ├── /config/ # This directory contains all configuration files │ ├── /env/ # Environment depending configs go here in respective files │ ├── /routes/ # All api route declarations go here. ...

    node-named-argv:一个简单的 node.js 模块,有助于将命名参数添加到节点应用程序调用

    一个简单的 node.js 模块,有助于将命名参数添加到节点应用程序调用 安装 npm install named-argv 用法 您可以对命名参数使用“--”和“-”前缀: node myapp.js --opt1=value1 -opt2=value 您还可以传递未命名...

    javascript生成树型结构

    children.style.display = node.classList.contains('open') ? 'block' : 'none'; } } document.querySelectorAll('.tree-node').forEach(node => { node.addEventListener('click', () => toggleNode(node)); }...

    dom-contains

    `contains()`方法是一个在Node对象上定义的函数,可以用来检测一个DOM节点是否包含指定的子节点。它的语法如下: ```javascript node.contains(childNode) ``` 其中,`node`是可能的父节点,`childNode`是我们要...

    breadth_first_search_BreadthFirstSearch_search_

    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); } ...

Global site tag (gtag.js) - Google Analytics