jQuery-如果变量在元素内匹配则样式

时间:2019-03-15 21:42:57

标签: jquery variables if-statement

仅在

中两个变量匹配时,如何将样式应用于div?

我认为我不正确地使用jQuery .each()方法。

我的目标是基于两个元素的匹配文本,仅对第一个div.main应用颜色更改。变量ab在第一个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');
    }
});

2 个答案:

答案 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');
}
});
相关问题
最新问题