You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何识别多个UL列表中属性相同的LI元素并定位?

解决方案

核心思路

按索引遍历每个LI的位置,收集所有列表中对应位置LI的data-attr值,通过判断这些值是否完全一致,来定位符合要求的LI元素。

代码实现

// 获取所有目标UL列表
const ulLists = document.querySelectorAll('ul');
// 取第一个UL的LI数量(已知所有UL行数相同)
const totalLiItems = ulLists[0].querySelectorAll('li').length;

// 遍历每个LI的位置索引
for (let index = 0; index < totalLiItems; index++) {
    // 收集当前索引下,所有UL中对应LI的data-attr值
    const attrValues = Array.from(ulLists).map(ul => {
        return ul.querySelectorAll('li')[index].dataset.attr;
    });
    
    // 判断所有值是否完全一致:用Set去重后长度为1则说明全部相同
    const isAllSameAttr = new Set(attrValues).size === 1;
    
    if (isAllSameAttr) {
        // 定位这些LI,示例为添加高亮类
        Array.from(ulLists).forEach(ul => {
            const targetLi = ul.querySelectorAll('li')[index];
            targetLi.classList.add('matched-item');
            // 可根据需求替换为其他定位操作,比如打印、修改样式等
        });
    }
}

问题排查说明

你之前用if/else出现结果相反的情况,大概率是逻辑判断写反了:比如原本要判断「所有属性值相同」才处理,但误写成了「存在不同属性值」就处理。上面的代码通过Set(attrValues).size === 1精准判断所有值一致,能避免这个逻辑错误。

对应你提到的场景:

  • data-attr="fax"的LI在对应位置上所有值都相同,Set去重后长度为1,会被选中定位
  • data-attr="email"的LI对应位置存在不同值,Set去重后长度大于1,不会被处理

内容的提问来源于stack exchange,提问作者JS_basic_knowledge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:35:26