0

我知道如果在 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();
}

如果我只输入if而不是else if它有效但它不正确。

4

3 回答 3

1

document.location.href.indexOf('#1') 如果没有找到匹配,则表达式将返回 -1,如果在字符串的开头匹配则返回零。由于您测试错误值,因此您永远不会得到错误结果(-1 评估为 Boolean true)。你应该写:

if (document.location.href.indexOf('#1')>-1) {

但是由于您似乎在比较哈希,所以我们直接做那些(并在我们处理时使用正确的): 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();
}
于 2012-12-17T14:53:48.793 回答
1

看起来你想检查 url 中的哈希值,所以你为什么不使用

location.hash

因为location.href包括整个网址

于 2012-12-17T14:59:36.753 回答
0

首先,如果您使用的是 indexOf:

if (document.location.href.indexOf('#1'))

但在其他情况下,如果您不使用它,而是比较 href.location 本身:

else if (document.location.href === '#2') 
于 2012-12-17T14:55:12.573 回答