循环if,如果为false则返回,如果为true =>如果

时间:2012-03-04 01:29:22

标签: javascript jquery loops if-statement

所以我得到了以下场景:

$('.menu').find('a').each( function(el, val) {
  if( window.location.hash !== val.hash ) {
    $('.menu li').first().addClass('active') // we found no valid hash for us, so set first <li> active
    $('#hash1').show() // and show the first content
  } else {
    $(this).parent().addClass('active') // we found an hash, so give its parent <li> an active class
    $(window.location.hash).show() // can be #hash2, #hash3, whatever
    return false; // since we found something, stop the if.
  }
});

现在很明显,每当我们找不到有效的哈希时,我们将第一个元素设置为活动并显示第一个内容......但我不想要那个。

我希望if在我们进入else语句之前先遍历所有元素..然后如果我们什么也没找到,请将第一个元素设置为active并显示第一个内容。

因为我循环遍历每个“a”,我该怎么做?

4 个答案:

答案 0 :(得分:3)

只需将变量保留在循环之外:

var found = false;

$('.menu').find('a').each( function(el, val) {
    if( window.location.hash === val.hash ) {
        $(this).parent().addClass('active'); // we found an hash, so give its parent <li> an active class
        $(window.location.hash).show(); // can be #hash2, #hash3, whatever

        found = true;
    }
});


if(!found) {
    $('.menu li').first().addClass('active'); // we found no valid hash for us, so set first <li> active
    $('#hash1').show(); // and show the first content
}

此外,语句末尾的分号可选。

答案 1 :(得分:1)

您可以使用.filter()获取所需的元素。如果未选择任何一个,则执行默认操作:

var $links = $('.menu').find('a').filter(function() {
    return window.location.hash === this.hash;
});

if($links.length > 0) {
    $links.parent().addClass('active');
    $(window.location.hash).show();
}
else {
    $('.menu li').first().addClass('active');
    $('#hash1').show();
}

参考.filter

答案 2 :(得分:0)

如果你能用英语更清楚地解释你的要求,我想你会发现自然会有JavaScript结构。

以下是我对您要做的事情的最佳猜测:.hash具有相同window.location.hash的“.menu”中的所有主持人应将其“父”设为“有效” “和显示的相应元素。如果没有匹配则应该使第一个菜单项“活动”并显示“#hash1”。

var matched = false;
$('.menu').find('a').each( function(el, val) {
  if( window.location.hash === val.hash ) {
    matched = true;
    $(this).parent().addClass('active');
    $(window.location.hash).show();
  }
});
if (!matched) {
    $('.menu li').first().addClass('active');
    $('#hash1').show();
}

答案 3 :(得分:0)

var elm = $(window.location.hash).length ? window.location.hash : '#hash1';
$(elm).show();
$('a[href$="'+elm+'"]').parent().addClass('active');

假设#hash1的标记与其他标记相同,并且浏览器地址栏中只有一个哈希值(或者没有)?