jQuery document.location.href if,else if和else

时间:2012-12-17 14:51:30

标签: jquery jquery-ui

我知道其他如果适用于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();
}

如果我只放如果而不是其他它可以正常工作,但它不正确。

3 个答案:

答案 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)

如果你使用indexOf,那么

在第一个:

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

但是在其他方面,如果你不使用它,而是比较href.location本身:

else if (document.location.href === '#2')