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

jQuery求助:匹配两列表文本添加类仅最后项生效的问题解决

问题:匹配列表文本并添加类名仅最后一项生效

我需要检测list_1中的文本是否存在于list_2中,找到匹配项时给对应的list_2列表项添加“show”类。示例里“This is text c”和“This is text e”都应该被添加该类,但当前代码只有最后一项“This is text e”生效。

原HTML代码:

<ul class="list_1">
  <li>This is text c</li>
  <li>This is text e</li>
</ul>

<ul class="list_2">
  <li><i class="far fa-fw fa-square"></i>This is text a</li>
  <li><i class="far fa-fw fa-square"></i>This is text b</li>
  <li><i class="far fa-fw fa-square"></i>This is text c</li>
  <li><i class="far fa-fw fa-square"></i>This is text d</li>
  <li><i class="far fa-fw fa-square"></i>This is text e</li>
</ul>

原Script代码:

$(function(){

var showTag;

$('.list_1 li').each(function(){
      showTag = $(this).text();
});

$('.list_2 li').each(function(){
   if($(this).text()==showTag)
       $(this).closest('li').addClass('show');
});

});

错误原因

你当前的代码逻辑有问题:showTag是单个变量,遍历list_1的每个li时,会不断用新的文本覆盖掉旧值,循环结束后showTag只会保留list_1最后一个li的内容(也就是“This is text e”),所以遍历list_2时自然只能匹配到最后一项。

修正后的代码

把list_1的所有目标文本存到一个数组里,再遍历list_2检查当前项是否在数组中:

$(function(){
    // 收集list_1中所有li的文本,trim去除前后空白避免匹配误差
    var targetTexts = $('.list_1 li').map(function(){
        return $(this).text().trim();
    }).get();

    $('.list_2 li').each(function(){
        var currentLiText = $(this).text().trim();
        // 检查当前文本是否在目标数组内
        if(targetTexts.includes(currentLiText)){
            $(this).addClass('show'); // $(this)就是当前li,无需closest
        }
    });
});

补充说明

添加.trim()是为了处理文本前后可能存在的空格、换行符等空白字符,避免这些无关字符导致匹配失败,让判断更准确。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:17:09