You need to enable JavaScript to run this app. jQuery如何仅选取相邻indented类的下一个div并匹配前置li的id
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 13:06:02