所以我得到了以下场景:
$('.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”,我该怎么做?
答案 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
的标记与其他标记相同,并且浏览器地址栏中只有一个哈希值(或者没有)?