jQuery如何仅选取相邻indented类的下一个div并匹配前置li的id
问题根因
- 原有代码的逻辑偏差直接导致所有
.indented节点id重复:- 代码中通过
.attr('id')获取元素id时,当前选中的集合包含所有带.comment-parent类的li元素,jQuery的该方法仅会返回集合中第一个匹配元素的id值,后续所有赋值操作都复用了这个固定编号(也就是示例里第一个li的137),没有动态读取每个父级li的实际id值。 - 代码没有对每个
.comment-parent做单独遍历处理,而是直接批量选中所有匹配到的.indented节点一次性写入属性,自然所有节点都会被设置成同一个固定id值。
- 代码中通过
修正后的实现代码
if ($('.o-commentaires-items').length) { // 遍历每个带comment-parent类的li节点,单独处理其对应的兄弟容器 $('.o-commentaires-items').find('.comment-parent').each(function() { // 读取当前遍历的li自身的id值 const currentLiId = $(this).attr('id').split(' ')[0]; // 提取id末尾的数字编号 const currentNumber = currentLiId.substr(currentLiId.lastIndexOf("-") + 1); console.log("当前匹配的折叠面板ID: ", `collapsee-${currentNumber}`); // 仅定位当前li紧邻的下一个.indented节点,单独写入对应属性 $(this).next('.indented') .addClass('collapse') .attr({ "id": `collapse-${currentNumber}`, "aria-labelledby": `heading-${currentNumber}` }); }); }
补充说明
- 修正后的逻辑会严格为每个
.comment-parent匹配其紧邻的下一个.indented兄弟元素,生成的id会与前置li的编号一一对应,不会出现多节点id重复的问题。 - 现有HTML结构中
<ul>标签下直接嵌套<div>属于不符合HTML语义规范的写法,后续可考虑将包裹子评论的容器调整为合规结构(比如嵌套在对应父级li内部),避免出现脚本匹配或布局的意外问题。
内容的提问来源于stack exchange,提问作者mitsu
相关产品推荐
相关产品推荐

