nextElementSibling 和 previousElementSibling 是只读属性,用于获取同级相邻的元素节点,跳过文本、注释等非元素节点;而 nextSibling/previousSibling 返回所有类型节点,易受空白影响。

nextElementSibling 和 previousElementSibling 是 DOM 元素对象的只读属性,用于获取当前元素的**紧邻的下一个或上一个兄弟元素节点**(注意:只返回元素节点,忽略文本、注释等非元素节点)。
它们和 nextSibling / previousSibling 的区别
这是最关键的一点:
- nextSibling / previousSibling:返回所有类型的节点,包括空格、换行产生的文本节点,容易导致“取到 null 或意外的文本节点”
- nextElementSibling / previousElementSibling:跳过所有非元素节点,**只返回相邻的 HTML 元素**,更符合日常开发预期
基本用法示例
假设有如下 HTML:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
<div id="b">B</div>
<div id="c">C</div>
在 JS 中:
-
document.getElementById('a').nextElementSibling→ 返回<div id="b"> -
document.getElementById('b').previousElementSibling→ 返回<div id="a"> -
document.getElementById('c').nextElementSibling→ 返回null(后面没元素了) -
document.getElementById('a').previousElementSibling→ 返回null(前面没元素了)
使用时要注意的细节
- 返回值可能是
null,使用前建议判空,避免报错:if (el.nextElementSibling) { ... } - 它们不跨父级——只在**同一父元素下的直接子元素中查找**
- 不支持 IE8 及更早版本(但现代项目基本无需兼容),IE9+、Chrome、Firefox、Safari 均支持
- 如果中间有注释或大量空白(如换行缩进),
nextSibling可能返回文本节点,而nextElementSibling会自动跳过,更可靠
实用小技巧:遍历所有后续兄弟元素
想获取从当前元素开始的所有后续兄弟元素?可以循环使用 nextElementSibling:
let siblings = [];
while (el = el.nextElementSibling) {
siblings.push(el);
}
// siblings 现在包含所有后面的兄弟元素

















