获取DOM元素所有同级兄弟节点需先通过parentNode.children获取元素节点(推荐)或parentNode.childNodes获取全部节点,再用Array.from转数组并filter排除自身;比较必须用===引用相等,不可用id等属性。

要获取某个 DOM 元素的所有同级兄弟节点(不包括自己),核心是先拿到它的父元素,再获取父元素的所有子节点,最后过滤掉目标元素本身。
使用 parentNode.children 获取所有同级元素节点(推荐)
这是最常用、最实用的方式,只返回元素节点(即 HTML 标签,不包括文本、注释等节点),语义清晰且兼容性好。
- 注意:
children返回的是HTMLCollection,不是数组,需转为数组才能用filter等方法 - 代码示例:
const el = document.getElementById('myDiv');
const siblings = Array.from(el.parentNode.children).filter(sib => sib !== el);
这样得到的就是除自身外的所有同级元素节点(<div>、<p> 等),不含空白文本节点。
使用 parentNode.childNodes 获取所有同级节点(含文本、注释)
如果需要包括换行、空格、注释等“真实”节点,则用 childNodes,但它会混入非元素节点,需手动过滤。
立即学习“Java免费学习笔记(深入)”;
-
childNodes返回NodeList,可直接用filter(现代浏览器支持) - 过滤条件建议用
node.nodeType === 1(元素节点),比instanceof Element更兼容
const el = document.getElementById('myDiv');
const allSiblings = Array.from(el.parentNode.childNodes)
.filter(node => node.nodeType === 1 && node !== el);
排除自己时避免用 === 比较失败的情况
确保比较的是同一个 DOM 对象引用。只要变量指向的是页面中那个真实元素,=== 就可靠;不要用 innerHTML 或 id 等属性去“模拟”判断。
- 错误写法:
sib.id === el.id(多个元素可能 id 相同或为空) - 正确做法始终是:
sib === el(引用相等)
封装成可复用函数
可以简单封装一个工具函数,便于多次调用:
function getSiblings(el) {
return Array.from(el.parentNode.children).filter(sib => sib !== el);
}
// 使用
const siblings = getSiblings(document.querySelector('.active'));
如需包含文本节点,把 children 换成 childNodes 并加上 node.nodeType === 1 判断即可。


















