仅在
我认为我不正确地使用jQuery .each()
方法。
我的目标是基于两个元素的匹配文本,仅对第一个div.main
应用颜色更改。变量a
和b
在第一个div.main
中匹配。这些变量在第二个div.main
中不匹配。
而不是将颜色更改为第一个div.main
,我得到的是“ no matches exist
”。
我不是在问如何简单地将样式分配给div。我要问的是,仅当div中两个元素的文本匹配时,如何设置div的样式。
预先感谢您的帮助!
https://jsfiddle.net/md32/ue1t3pov/35/
<div class="main">
<a>
<span>make this red</span>
</a>
<div class="section">
<div></div>
<ul>
<li>make this red</li>
</ul>
</div>
</div>
<div class="main">
<a>
<span>don't make this red</span>
</a>
<div class="section">
<div></div>
<ul>
<li>again, don't make this red</li>
</ul>
</div>
</div>
var a = $('div.main a span').text();
var b = $('div.section ul li').text();
$('div.main').each(function() { // for each 'div.main'
if (a === b) { // if these two variables match
$(this).css('color','red'); // color 'div.main' red
} else {
alert('no matches exist');
}
});
答案 0 :(得分:1)
该错误是因为您没有比较正确的数据。我更改了javascript代码,以便它比较正确的元素,并且更改了打印出不匹配项的条件。如果任何div没有匹配项,则将打印no匹配项。
var counter = 0 ;
$('div.main').each(function() { // for each 'div.main'
if ($(this).find('span').first().text() === $(this).find('li').first().text()) { // if these two variables match
$(this).css('color','red'); // color 'div.main' red
counter = 1;
} else {
if(counter === 0) {
alert('no matches exist');
}
}
});
此外,如果您要计算具有匹配项的div的数量,则可以更改为此分配的计数器值:
counter = counter + 1;
答案 1 :(得分:0)
对我来说,看来您遇到了逻辑上的问题。您在开始每个循环之前直接声明a和b。
您正在想象a和b的值在循环内部正在变化。但事实并非如此。
我建议您添加一条打印语句,以便您可以查看循环中A和B的值。 (此代码会打印出来,向您显示错误)
var a = $('div.main a span').text();
var b = $('div.section ul li').text();
$('div.main').each(function() { // for each 'div.main'
alert("a is -> "+a+"\n b is -> "+b+"\n");
if (a === b) { // if these two variables match
$(this).css('color','red'); // color 'div.main' red
} else {
alert('no matches exist');
}
});
这里是动态分配a和b的示例,这样您可以获得更多的期望值(并注意first()的使用。如果您首先运行上面的代码,然后看到返回的结果超出了预期)您的选择器。(此代码完成了您想要的操作)
var a;
var b;
$('div.main').each(function() { // for each 'div.main'
a = $(this).find("a span").first().text();
b = $(this).find(".section ul li").first().text();
console.log(a);
if (a === b) { // if these two variables match
$(this).css('color','red');
} else {
alert('no matches exist');
}
});