【问题标题】:jQuery If text in div1 matches text any part of div2, add a class to div1jQuery 如果 div1 中的文本与 div2 的任何部分的文本匹配,则向 div1 添加一个类
【发布时间】:2011-08-11 22:25:19
【问题描述】:

自从我用 jQuery 试验了几天以来,一些东西(比如数组)仍然让我大吃一惊。例如,解开 indexOf 函数的感觉就像是在英格兰退出车道时试图右转。无论如何,我尝试根据一个 div 与另一个 div 的索引的比较来应用一个类……而且(当然)我无法让它工作。希望您能告诉我我是否对以下脚本“热情”。或者,如果不是,如何解决。

简而言之:基本思想是,如果您将鼠标悬停在任何 .elbox div 上,脚本会将该 elbox 的 .skemps div 中的文本与每个 .pjemp div 中的内容进行比较;如果找到匹配项,则将类应用于匹配的 .pjemp div。

Div1:#ptosEmps li div

<div id="ptosEmps"> 
 <div class="menu">
  <ul id="menu"> 
    <li><div class="pjemp"><a>T</a></div></li>
    <li><div class="pjdesc">T Description</div></li>
    <li><div class="pjemp"><a>I</a></div></li>
    <li><div class="pjdesc">I Description</div></li>
    <!-- ... (one primary li and description li for each of the .skemps letters -->
  </ul>
 </div>
</div>

Div2:#ptosTable .elbox .skemps

<div id="ptosTable">
 <div class="elbox">
  content
  <div class="skemps">T,I,H,P,W,L,N,F</div>
 </div>
 <!-- About 100 of these. .skemps div can contain one or more of those letters. -->
</div>

脚本(不起作用):

$('#ptosEmps li').filter(":even").hover(function() {
    $(this).filter(function() {
    return $('#ptosTable .skemps').text().indexOf($('.pjemp').text()) == -1;
        //if skemps = any text in menu div, return true?
    }).addClass('.emp_hi');
},
function() {
    $(this).removeClass('.emp_hi');
});

我想也许我需要以某种方式将整个过滤器函数定义为 $(this),然后说类似“$(this).addclass('.emp_hi');”的内容但是怎么做呢?

---------

为了记录,我忘了提到 Div2 中的文本(触发 Div1 中的 addClass)也是通过 css 隐藏的。因此,根据 BumbleB2na 的建议,这就是我最终得到的结果(WORKS!):

$('.elbox').hover(function() {
    var arrSkemp = $(this).children('.skemps').text().split(',');
    $.each(arrSkemp, function(index, value) {
        $('.pjemp:contains(' + value + ')').addClass('emp_hi');
    });
},
function() {

    $('.pjemp').removeClass('emp_hi');
});

对 BumbleB2na 的支持——既能帮助我解决问题中的问题,又能快速、非常实用地做出反应,不会让我的大脑崩溃!

【问题讨论】:

  • .pjemp 你的意思是 .pjdesc 吗?您想查看 skemps text: 'T,I,H,P,W,L,N,F' 中的 'I' 是否与 pjdesc text: 'I Description' 中的 'I' 匹配?
  • 哦,伙计,您在每个 'pjdesc' div 之前的 div 上都缺少 'pjemp' 类
  • $('#.pjemp') 错误 # 用于 getElementById. 是按类获取元素
  • 您能帮我仔细检查一下您的问题吗?我很困惑,因为 javascript 与您的 html 元素不匹配。
  • 好眼光,大黄蜂!将 pjemp 类添加到问题示例......和 ​​ptosTable div。 (简化示例的标记有点适得其反。)

标签: jquery arrays filter indexing hover


【解决方案1】:

K try my jsfiddle 出来,也许它会有所帮助。我无法让 indexOf() 工作,但这是我要使用的代码:

$('.skemps').hover(function() {
    var arrSkemp = $(this).text().split(',');
    $.each(arrSkemp, function(index, value) { 
        $('.pjemp:contains(' + value + ')').addClass('emp_hi');
    });
},
function() {
    var arrSkemp = $(this).text().split(',');
        $.each(arrSkemp, function(index, value) { 
            $('.pjemp:contains(' + value + ')').removeClass('emp_hi');
    });
});

【讨论】:

  • 是的,我/认为/有帮助。让我弄清楚如何将其插入我的本地设备中,我会接受。谢谢!
  • 啊,所以我的本地版本中有一个变量使事情变得混乱(.skemps 被隐藏)。但缺点是您的方法适用于给定的示例,并且仍然有很大帮助。谢谢,BumbleB2na!
  • 好的。我没有大量使用 IndexOf(),但我确信可能会有更快的解决方案。一种加快速度的方法是使用选择器,就像您使用 ('#ptostable .skemps') b/c 那样,然后 jQuery 就不必遍历整个 DOM。
猜你喜欢
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
相关资源
最近更新 更多