遍历节点就是从一个元素出发,找它的爸爸、孩子、兄弟。
核心六个:
① parentNode——爸爸
② children / childNodes——孩子(元素 / 全部节点)
③ firstElementChild——第一个元素孩子
④ lastElementChild——最后一个元素孩子
⑤ previousElementSibling——上一个兄弟
⑥ nextElementSibling——下一个兄弟
坑:childNodes 包含空白文本节点、children 只含元素节点、nextSibling 会拿到空白节点。
点按钮: 以香蕉为中心, 亲戚会被点亮, 下面同步代码与结论。
// 抓到"香蕉"那一行
let banana = document.getElementById('target');
// 往上问一层:我爹是谁?
let dad = banana.parentElement;
// 打出来 → "UL",它爹是 ul
console.log(dad.nodeName);
注意有两组:children 只挑标签娃,把换行空格这些空气娃全滤掉;childNodes 会连空气娃一起算。平时用 children。
// 抓到水果清单 ul
let ul = document.getElementById('fruit');
// 它的所有标签娃(伪数组,空格娃不算)
let kids = ul.children;
// 有几个娃 → 3
console.log(kids.length);
// 挨个打印每个娃的字
for (let i = 0; i < kids.length; i++) console.log(kids[i].innerText);
// 右边邻居 → 橙子 banana.nextElementSibling; // 左边邻居 → 苹果 banana.previousElementSibling; // 如果已经是排头或排尾,就返回 null(没有了)
如果你拿到排头那个 li 还去问"左边邻居是谁",会得到 null;这时再去 .innerText 就报错。因为排头左边没人;用之前先判一下 null。
① 用在哪:点删除按钮要找上一行、找同级兄弟、找父容器。
② 常见坑:排头/排尾取邻居得到 null,再 .innerText 报错。
③ 怎么解决:取到先判 null 再用;children 只取元素,空白文字已自动过滤。
| API | 作用 | 参数 | 返回值 | 代码示例 |
|---|---|---|---|---|
| 元素.parentElement | 找直接爹 | 无 | 父元素/null | let dad = li.parentElement; |
| 元素.children | 找所有标签娃(伪数组) | 无 | 伪数组 | let kids = ul.children; |
| nextElementSibling | 找右边邻居 | 无 | 元素/null | let sib = li.nextElementSibling; |
| previousElementSibling | 找左边邻居 | 无 | 元素/null | let sib = li.previousElementSibling; |