Понимание jQuery каждого цикла - PullRequest
4 голосов
/ 26 октября 2011

У меня есть следующий код:

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.Затем он продолжает выдавать предупреждение «У нас есть Карусель», когда совершенно ясно, что у нас нет Каруселей для остальных трех дел.Что я тут не так делаю?

Ответы [ 3 ]

9 голосов
/ 26 октября 2011

Это потому, что вы проверяете наличие объекта jQuery, который всегда равен true.Вам нужно проверить на length > 0 вместо:

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

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

3 голосов
/ 26 октября 2011

Это классический случай значений "правдивых" и "ложных" в javascript. Вы заметите, что $ (this) .has ('. Carousel') вернет объект. Объекты всегда правдивы в JavaScript. Пожалуйста, обратитесь по следующей ссылке:

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

2 голосов
/ 26 октября 2011
$('.sectionInner').each(function(i) {
    if ($('div', this).hasClass('carousel')) {
        alert('We got a Carousel!');
    }
    else {
        alert('No Carousels here')
    }
});
...