dom中获取父级用parentelement(仅元素,更安全)或parentnode(任意节点);子级用children(仅元素)或childnodes(全部节点);closest、queryselector等可精准定位。

获取元素的父级和子级节点,主要靠 DOM 节点的内置属性,不需要额外方法或库,直接用 .parentNode、.parentElement、.children、.childNodes 等即可。关键是要分清“节点(Node)”和“元素(Element)”的区别——文本、注释、元素都是节点,但只有标签才是元素。
获取父级:parentNode 和 parentElement 的区别
.parentNode 返回任意类型的父节点(可能是元素、文档片段、甚至 document),而 .parentElement 只返回父元素(即父级 HTML 标签),如果父节点不是元素(比如是 document 或 text node),.parentElement 返回 null。
- 日常操作推荐用
.parentElement,更安全,避免意外拿到非元素节点 - 需要精确处理所有节点类型时(如遍历整个树结构),才用
.parentNode - 示例:
document.body.parentElement是document.documentElement(即 ),而document.body.parentNode === document.documentElement也成立
获取子级:children 和 childNodes 的核心差异
.children 只返回子元素节点(即所有 HTML 标签子节点),不包含文本、空格、注释;.childNodes 返回全部子节点(包括换行、空格形成的 text node)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 想操作子标签(比如循环给每个按钮加事件),用
.children—— 它是 HTMLCollection,只含元素 - 需要处理文本内容或注释(少见),才用
.childNodes—— 它是 NodeList,需用node.nodeType判断类型 - 注意:
.children是实时集合,.childNodes也是,但现代写法中常转成数组操作:Array.from(el.children)
快速定位特定父/子元素的实用技巧
原生 API 提供了更精准的选择方式,比逐级访问更可靠:
- 找最近的符合条件的祖先元素:
el.closest('section')—— 向上查包括自己在内的第一个匹配元素 - 找某个父级下的特定子元素:
el.querySelector('.item')或el.querySelectorAll('button') - 只取第一个子元素:
el.firstElementChild(对应.lastElementChild)—— 比.children[0]更语义化且兼容性好 - 跳过文本节点,只遍历元素子节点:
for (const child of el.children) { ... }
常见误区提醒
容易混淆的几个点:
-
.childNodes包含换行符 → HTML 中写了换行,就可能生成 text node,导致.childNodes.length > .children.length -
.parentNode不一定等于.parentElement→ 比如document.documentElement.parentNode === document,但.parentElement为null -
.children是只读的 HTMLCollection,不能直接用.push()或.forEach()(老版本 IE 不支持 forEach),建议转数组再操作
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










