【发布时间】: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