我知道其他如果适用于jQuery,那么这段代码中存在的问题是:
if (document.location.href.indexOf('#1')) {
$(".products li").fadeIn();
}
else if (document.location.href === '#2') {
$(".products li").fadeOut();
$(".products li.2").stop(true,true).fadeIn(200);
}
else if (document.location.href === '#3') {
$(".products li").fadeOut();
$(".products li.3").stop(true,true).fadeIn(200);
}
else if (document.location.href === '#4') {
$(".products li").fadeOut();
$(".products li.4").stop(true,true).fadeIn(200);
}
else if (document.location.href === '#5') {
$(".products li").fadeOut();
$(".products li.5").stop(true,true).fadeIn(200);
}
else if (document.location.href === '#6') {
$(".products li").fadeOut();
$(".products li.6").stop(true,true).fadeIn(200);
}
else {
$(".products li").fadeIn();
}
如果我只放如果而不是其他它可以正常工作,但它不正确。
答案 0 :(得分:1)
表达式document.location.href.indexOf('#1')
will return -1 if no match is found,如果匹配在字符串的开头,则为零。由于您测试了falsey值,因此您将永远不会得到错误的结果(-1计算为布尔值true
)。你应该写:
if (document.location.href.indexOf('#1')>-1) {
但是既然你似乎在比较哈希,那就让我们直接做那些(并在我们使用的时候使用proper window.location
):
if (window.location.hash == '#1') {
// ...
} else if (window.location.hash == '#2') {
// etc.
那就是说,在你的情况下,我们可以通过解析那个哈希字符串完全不用if/else
来完成这个:
var hash = window.location.hash.substr(1); // remove leading #
if (hash) {
$(".products li").fadeOut();
$(".products li."+hash).stop(true,true).fadeIn(200);
} else {
$(".products li").fadeIn();
}
答案 1 :(得分:1)
看起来您想要检查网址中的哈希值,那么为什么不使用
location.hash
因为location.href
包含整个网址
答案 2 :(得分:0)
在第一个:
if (document.location.href.indexOf('#1'))
但是在其他方面,如果你不使用它,而是比较href.location本身:
else if (document.location.href === '#2')