jQuery 同胞

"同胞(Siblings)"指拥有同一个父级的元素,即兄弟节点。jQuery 的 siblings()、next()、prev() 等方法负责在同胞之间水平遍历。

演示用的兄弟结构:

<ul>
    <li id="li1">第一个</li>
    <li id="li2">第二个</li>
    <li id="li3">第三个</li>
    <li id="li4">第四个</li>
</ul>

siblings():所有同胞

siblings() 返回除自己以外的全部兄弟元素:

$("#li2").siblings().each(function () {
    console.log($(this).attr("id"));
});
// 输出:li1、li3、li4(不含 li2 自己)

也可传选择器过滤,只挑特定同胞:

console.log($("#li2").siblings("#li4").length); // 输出:1

next() 与 prev():紧邻的单个同胞

  • next():返回紧跟在后面的下一个兄弟
  • prev():返回紧挨在前面的上一个兄弟
console.log($("#li2").next().attr("id"));  // 输出:li3
console.log($("#li2").prev().attr("id"));  // 输出:li1

效果:每次都只移动一步,像指针在链表上走。

nextAll() 与 prevAll():一侧的全部同胞

  • nextAll():后面所有兄弟
  • prevAll():前面所有兄弟
$("#li2").nextAll().css("color", "red");  // 效果:li3、li4 变红
$("#li2").prevAll().css("color", "blue"); // 效果:li1 变蓝

适合"从某项起向后全部操作"的场景。

nextUntil() 与 prevUntil():到指定同胞为止

nextUntil(选择器) 收集后面兄弟,遇到匹配的元素就停止(不含它):

// 把 li2 之后、li4 之前的兄弟挑出来
$("#li2").nextUntil("#li4").each(function () {
    console.log($(this).attr("id"));
});
// 输出:li3(遇到 li4 停止,li4 本身不包含)

$("#li2").prevUntil("#li1"); // 效果:同理,返回空(li2 前面只有 li1,遇到即停)

同胞方法速查表

方法方向数量
siblings()双向除自己外全部
next() / prev()后 / 前各 1 个
nextAll() / prevAll()后 / 前一侧全部
nextUntil() / prevUntil()后 / 前到边界为止

综合示例:Tab 切换高亮

<button class="tab">页签1</button>
<button class="tab">页签2</button>
<button class="tab">页签3</button>
$(".tab").click(function () {
    $(this).addClass("active").siblings().removeClass("active");
});
// 效果:点击的页签高亮,同时清除其他页签的高亮

小结

同胞遍历围绕"兄弟"做水平移动:siblings() 拿全部兄弟、next/prev 走一步、All 版本到一侧尽头、Until 版本设边界。会"先加后清"就能轻松实现 Tab 等经典交互。

笔记加载中…