当前位置: 首页 > news >正文

jQuery 遍历 - 同胞(siblings)

jQuery 遍历 - 同胞元素 (Siblings)

在 jQuery 中,同胞(兄弟)遍历用于查找与当前选中元素处于同一层级的其他元素。这些元素拥有相同的父元素。

一、核心方法

1.siblings()- 获取所有同胞元素

返回选中元素的所有兄弟元素(不包含自身)。

// 语法$(selector).siblings();$(selector).siblings("selector");// 可选:过滤特定同胞// 示例$("li").siblings();// 返回当前 li 的所有兄弟 li$("li").siblings(".active");// 返回当前 li 中 class 为 active 的兄弟元素

特点

  • 返回所有同级的兄弟元素。
  • 不包含当前元素本身。
  • 支持选择器过滤,性能优于获取所有后再.filter()

2.next()- 获取下一个同胞

仅返回紧邻的下一个兄弟元素。

// 语法$(selector).next();$(selector).next("selector");// 可选:如果下一个元素不匹配选择器,返回空// 示例$("li").next();// 返回下一个 li$("li").next("p");// 如果下一个兄弟是 p 则返回,否则返回空

3.nextAll()- 获取后面所有同胞

返回当前元素之后的所有兄弟元素。

// 语法$(selector).nextAll();$(selector).nextAll("selector");// 可选:过滤特定同胞// 示例$("li").nextAll();// 返回当前 li 之后的所有兄弟$("li").nextAll(".item");// 返回当前 li 之后所有 class 为 item 的兄弟

4.nextUntil()- 获取直到指定元素前的同胞

返回当前元素与指定选择器匹配的元素之间的兄弟元素(不包含指定元素本身)。

// 语法$(selector).nextUntil("selector");$(selector).nextUntil("selector","filter");// 可选:额外过滤// 示例// HTML: <li>1</li> <li>2</li> <li class="stop">3</li> <li>4</li>$("li:first").nextUntil(".stop");// 返回:<li>2</li> (不包含 .stop)

5.prev()/prevAll()/prevUntil()

与上述方法对应,但方向是向上(前一个、前面所有、直到指定元素前)。

$(selector).prev();// 上一个同胞$(selector).prevAll();// 前面所有同胞$(selector).prevUntil("selector");// 直到指定元素前的同胞

二、方法对比表

方法方向范围是否包含自身是否支持选择器
siblings()双向所有兄弟
next()向下仅下一个
nextAll()向下之后所有
nextUntil()向下直到指定元素是 (2个参数)
prev()向上仅上一个
prevAll()向上之前所有
prevUntil()向上直到指定元素是 (2个参数)

三、代码示例

场景 1:高亮当前项的兄弟项

<ul><liclass="item">Item 1</li><liclass="item active">Item 2</li><liclass="item">Item 3</li><liclass="item">Item 4</li></ul><script>// 高亮所有 active 项的兄弟项$(".active").siblings().css("background","yellow");// 或者:只高亮下一个兄弟$(".active").next().css("color","red");</script>

场景 2:动态表单验证提示

<divclass="form-group"><inputtype="text"class="username"/><spanclass="error-msg"style="display:none;">用户名已存在</span><button>提交</button></div><script>// 验证失败时,显示输入框后面的错误提示$(".username").on("blur",function(){if($(this).val()==="admin"){// 显示紧邻的下一个 .error-msg 元素$(this).next(".error-msg").show();}});</script>

场景 3:列表项移动(交换位置)

// 将当前 li 与下一个 li 交换位置$("li").click(function(){var$next=$(this).next();if($next.length){$(this).insertAfter($next);}});

场景 4:使用nextUntil批量处理

<divclass="section"><h2>标题</h2><p>段落 1</p><p>段落 2</p><hrclass="divider"><p>段落 3</p></div><script>// 选中 h2 后,隐藏直到 hr 之前的所有 p$("h2").nextUntil(".divider").filter("p").hide();</script>

四、常用技巧

1. 链式调用与end()

$("li.active").nextAll()// 切换到后面所有兄弟.addClass("future").end()// 回到 li.active.prevAll()// 切换到前面所有兄弟.addClass("past");

2. 判断是否存在特定方向的同胞

if($("li").next().length>0){console.log("存在下一个兄弟元素");}if($("li").prev(".active").length>0){console.log("前面有一个 active 的兄弟");}

3. 获取同胞的索引

// 获取当前 li 在所有兄弟中的索引varindex=$("li.active").siblings().length;// 注意:这不对。正确做法:varindex=$("li.active").index();// 或者在兄弟中查找varindexInSiblings=$("li.active").siblings().addBack().index();

更正:直接获取索引用.index(),获取在同胞中的相对位置通常不需要特殊方法,因为.index()默认就是相对于同胞的。

varindex=$("li.active").index();// 返回在父元素所有子元素中的索引

4. 结合filter进行复杂筛选

// 获取所有 active 的兄弟,且这些兄弟必须是 li$("li.active").siblings("li").addClass("highlight");

五、注意事项

  1. 不包含自身:所有同胞方法都不包含当前选中的元素。如果需要包含,需使用.addBack().andSelf()(旧版)。
  2. 同级限制:只查找同一父元素下的兄弟,不会跨越到父元素的兄弟或其他分支。
  3. 选择器过滤next("selector")nextAll("selector")中的选择器是过滤作用,即只返回匹配选择器的元素,而不是“查找下一个匹配选择器的元素”(虽然效果类似,但逻辑不同)。
    • next("p"):如果下一个元素是p则返回,否则返回空。
    • nextAll("p"):返回后面所有是p的元素。
  4. 空结果:如果没有匹配的同胞,返回空的 jQuery 对象,链式调用不会报错。
  5. 性能siblings()会获取所有兄弟再过滤,如果 DOM 很大且只需要下一个,优先用next()

六、总结图示

父元素 ├── 兄弟 A ├── 兄弟 B (当前选中) ├── 兄弟 C └── 兄弟 D siblings() -> [A, C, D] next() -> [C] nextAll() -> [C, D] prev() -> [A] prevAll() -> [A]

掌握同胞遍历方法,可以灵活处理列表、表单、导航栏等横向结构的 DOM 操作。

http://www.jsqmd.com/news/674353/

相关文章:

  • 题解:AtCoder AT_awc0002_d Keys and Treasure Boxes
  • 用Unity ML-Agents训练一个会踢足球的AI:从场景导入到模型部署完整实战
  • COF-8@Fe₃O₄ NPs,COF-8修饰四氧化三铁纳米颗粒,合成及纯化过程
  • 微信生态的技术引擎API
  • 价格型需求响应:分时电价下光伏微网储能系统多目标容量优化配置研究
  • 如何正确使用 React 的 useContext Hook 管理组件状态
  • 别再只盯着ChatGPT了!从扫地机器人到工业机械臂,一文看懂AI如何让机器“活”起来
  • AI CRM价值模式测评:功能交付还是结果交付?
  • Mobilerun终极指南:用自然语言轻松控制Android和iOS设备
  • 华为WATCH FIT 5系列发布:轻薄时尚+专业健康,成年轻用户智能穿戴更优解
  • Co-MOF-74@Fe₃O₄ NPs,Co-MOF-74修饰四氧化三铁纳米颗粒,反应机制
  • 为什么 Iceberg v3 是数据湖仓的“iPhone 时刻“?
  • ANSYS WORKBENCH轴承动力学仿真:内圈、外圈及滚子故障模拟与凯斯西储大学SKF轴承...
  • STNN算法研究
  • Unity学习笔记(六)——3DRPG游戏(4)
  • 如何永久保存QQ空间青春记忆?GetQzonehistory一键备份终极方案
  • 从理论到实战:手把手教你用Python(NumPy+Pandas)搞定拉丁超立方抽样并导出Excel
  • 2026 云南 AIGEO 服务市场对比分析:云南企服科技综合实力评估
  • 2026最稳代练创业项目:三角洲护航系统——全端部署+智能匹配,破解获客与信任难题
  • 存储过程详解:把SQL逻辑“打包”存起来,下次一键调用!|转行学DB第12天
  • Vue3项目里,除了clearFiles,Element-Plus上传组件还有哪些隐藏技巧?
  • 国际半导体全产业链展会推荐:全球覆盖上下游优质展会精选 - 品牌2026
  • 全国一体化算力网调度:政务 AI 规模化应用的算力底座如何搭建
  • 多视角视频扩散策略:一种三维时空-觉察视频动作模型
  • GD32F103串口调试:从printf重定向到中断收发,一个工程搞定所有(附完整代码)
  • JavaScript中严格模式use-strict对引擎解析的辅助
  • AIGC部署和生成图片
  • 移动号码状态查询 API 集成指南
  • Claude Code 安装报错 “不兼容 Windows 版本“ 完整修复记录
  • 【Dify v0.8+多模态调试黄金标准】:基于37个企业级部署案例验证的4层可观测性接入方案