了解每个循环的jQuery

时间:2011-10-26 12:45:02

标签: jquery each

我有以下代码:

HTML:

<div class="sectionInner"><div class="carousel"></div></div>
<div class="sectionInner"></div>
<div class="sectionInner"></div>
<div class="sectionInner"></div>

JS:

function checkForCarousel() {
    $('.sectionInner').each(function(i) {
        if($(this).has('.carousel')) {
            alert('We got a Carousel!');
        }
        else {
            alert('No Carousels here')
        }
    });
}

checkForCarousel();

我想要做的是循环遍历四个div.sectionInner,如果我找到一个带旋转木马类的孩子,那么我想附加一些按钮。我知道我可以直接定位旋转木马,但这是更大图片的一部分,我确实有理由想要使用循环。

无论如何,当循环开始时,它会警告'我们有一个旋转木马',正如您对第一个div所期望的那样。然后,当很明显我们没有其他三个div的旋转木马时,它会继续警告'我们有一个旋转木马'。我在这里做错了什么?

3 个答案:

答案 0 :(得分:9)

这是因为你正在测试jQuery对象的存在,它始终是true。您需要测试length > 0

if($(this).has('.carousel').length) { // is false if length == 0

http://jsfiddle.net/mblase75/DzafK/

答案 1 :(得分:3)

这是javascript中“truthy”和“falsey”值的经典案例。您会注意到$(this).has('。carousel')将返回一个对象。对象在javascript中总是很简单。请参考以下链接:

http://james.padolsey.com/javascript/truthy-falsey/?utm_source=javascriptweekly&utm_medium=email

答案 2 :(得分:2)

$('.sectionInner').each(function(i) {
    if ($('div', this).hasClass('carousel')) {
        alert('We got a Carousel!');
    }
    else {
        alert('No Carousels here')
    }
});