contains是dom原生方法,用于判断祖先节点是否包含指定子节点(含自身及任意后代),要求节点同属一个文档,不适用于文本或class名检测。

contains 是 DOM API 提供的原生方法,用于判断一个节点是否**包含**(即自身或其任意后代)另一个指定节点。它返回布尔值,用法简单但有几个关键细节需要注意。
基本用法:调用方必须是祖先节点
必须在**父级(或祖级)节点上调用 contains(),传入待检测的子节点作为参数:
-
✅ 正确:
parent.contains(child) -
❌ 错误:
child.contains(parent)(子节点无法“包含”父节点)
支持任意层级的后代,不只是直接子节点
contains 检查的是“是否在子树中”,包括自身、子节点、孙节点等所有后代:
- 如果
child就是parent自身,parent.contains(child)返回 true - 如果
child是parent.querySelector('.deep-nested')的结果,只要它在parent内部,也返回 true
注意:节点必须在同一个文档中
若待检测节点尚未插入文档(如刚用 document.createElement() 创建但未 append),或属于其他 iframe / shadow root 中的文档,contains 会返回 false:
- 新创建的元素需先挂载到目标父节点或其后代中,才能被
contains识别 - 跨 shadow DOM 边界时,普通
contains不生效(需用shadowRoot.contains()在对应上下文中调用)
常见误用与替代方案
不要用 contains 判断文本内容或 class 名称 —— 它只认节点对象:
-
❌ 错误:
div.contains('hello')(字符串不是节点) -
❌ 错误:
div.contains('my-class')(class 名也不是节点) -
✅ 替代:查文本用
textContent.includes('hello');查 class 用element.classList.contains('my-class')










