contains是DOM节点方法,用于判断调用节点是否包含指定后代节点,返回布尔值;要求参数均为有效Node对象,不支持字符串匹配或IE8及以下。

contains 是 DOM 节点对象的一个原生方法,用于判断当前节点是否**包含**(即是否是祖先节点)另一个指定的节点。它返回布尔值:true 表示包含,false 表示不包含。
基本用法:parent.contains(child)
调用方必须是父节点(或更上层的祖先节点),参数是待检测的子节点(或后代节点):
- ✅ 正确写法:
parentNode.contains(childNode) - ❌ 错误写法:
childNode.contains(parentNode)(子节点不可能包含父节点,永远返回false)
使用前需确保节点存在且类型正确
contains() 要求两个参数都是有效的 Node 对象(如 Element、Text、Comment 等)。常见错误包括:
- 传入
null或undefined→ 抛出TypeError - 传入字符串(如 ID 名)→ 不会自动查找,直接返回
false(或报错) - 正确做法:先用
document.getElementById或querySelector获取真实节点
示例:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
const parent = document.getElementById('container');
const child = document.querySelector('#item-1');
if (parent && child && parent.contains(child)) {
console.log('child 在 parent 内部');
}
注意:contains 不支持文本内容匹配
contains() 判断的是**节点关系**,不是内容是否包含某个字符串。例如:
-
div.contains('hello')❌ 语法错误(字符串不是节点) - 想查文字内容是否含某字符串?用
textContent.includes('hello')或正则 - 想查子元素是否存在?除了
contains,也可用parent.querySelector('.target') !== null
兼容性与替代方案
contains() 在所有现代浏览器及 IE9+ 中都支持。IE8 及更早版本不支持,若需兼容可手动实现:
function contains(parent, child) {
if (!parent || !child) return false;
if (parent === child) return true;
return parent.contains ? parent.contains(child) :
parent.compareDocumentPosition(child) & Node.DOCUMENT_POSITION_CONTAINED_BY;
}
不过目前绝大多数项目已无需考虑 IE8。

















