jQuery如果div1中的文本与div2的任何部分匹配,则向div1添加一个类

时间:2011-08-11 22:25:19

标签: jquery arrays filter indexing hover

由于我现在已经尝试了几天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的道具---无论是帮助我解决问题中的问题,还是为了快速,非常有效的反应,都没有打破我的大脑!

1 个答案:

答案 0 :(得分:2)

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');
    });
});