根据url哈希更改可见内容

时间:2013-05-13 15:37:37

标签: php jquery hash

现在我有这个清单:

<ul id="list">
    <li id="active"><a href="#home" id="home-link"><img src="main home page/purhome.png"></a></li>
    <li id="active"><a href="#info" id="info-link"><img src="main home page/purinfo.png"></a></li>
    <li id="active"><a href="#gyms" id="gyms-link"><img src="main home page/purgyms.png"></a></li>
    <li id="active"><a href="#contact" id="contact-link"><img src="main home page/purcontact.png"></a></li>
</ul>

这个JQuery:

$(document).ready(function(){
    $("#home-link").click(function(){
        $("#main_info2").hide();
        $("#main_info").show();
    });
    $("#info-link").click(function(){
        $("#main_info").hide();
        $("#main_info2").show();
    });
    $("#gyms-link").click(function(){
        $("#main_info").hide();
        $("#main_info2").show();
    });
    $("#contact-link").click(function(){
        $("#main_info").hide();
        $("#main_info2").show();
    });
});

当我点击主页链接时,URL显示indexp.php #home,这是我想要显示的内容。所有链接都会发生这种情况。但是,如果我在单击信息链接后刷新页面,则会显示main_info div,但浏览器仍然显示index.php #info。我想以某种方式阅读哈希,以显示正确的div,具体取决于网址的内容。

因此,例如,如果我点击信息链接,网址会显示index.php #info。当我刷新它说同样的事情,但main_info div显示什么时候应该显示main_info2 div。

function getHash() { 
    var hash = window.location.hash; 
    return hash.substring(1); // remove # 
}

所以我有那个代码。我会做这样的事吗?

if hash = 'info' // if url says index.php#info
    show main_info2
    hide main_info

if hash = nothing // So if url says index.php
    show main_info
    hide main_info2

有什么想法吗?

编辑**

我正在尝试做这样的事情让它发挥作用:

var currentValue = window.location.hash.substr(1)
    $(document).ready(function() {
     $("home-link").click(function(){
        if(currentValue == "home") {
            $("#main_info2").hide();
            $("#main_info").show();
        }
     });
     $("info-link").click(function(){
        if(currentValue == "info") {    
            $("#main_info").hide();
            $("#main_info2").show();
        }
     });
    });

虽然这不起作用,但有人可以查看代码吗?

3 个答案:

答案 0 :(得分:1)

你可以使用这个jQuery插件来监听哈希变化:

https://github.com/cowboy/jquery-hashchange

如果您希望代码跨浏览器工作,我建议使用插件,因为这尚未标准化。特别是旧版浏览器(IE6)需要大量黑客攻击。

答案 1 :(得分:1)

在讨论了不同的答案和问题之后,我提出了这个解决方案:

$(document).ready(function(){
 $(window).hashchange(function(){
 var hash = location.hash;
  if(window.location.hash.substr(1) == "home") {
            $("#info-container").hide();
            $("#gyms-container").hide();
            $("#contact-container").hide();
            $("#home-container").show();
        }
          else if(window.location.hash.substr(1) == "info") { 
            $("#home-container").hide();
            $("#gyms-container").hide();
            $("#contact-container").hide();
            $("#info-container").show();
        }
        else if(window.location.hash.substr(1) == "gyms") { 
            $("#home-container").hide();
            $("#info-container").hide();
            $("#contact-container").hide();
            $("#gyms-container").show();
        }
                    else if(window.location.hash.substr(1) == "contact") { 
            $("#home-container").hide();
            $("#info-container").hide();
            $("#gyms-container").hide();
            $("#contact-container").show();
        }
    $('#list a').each(function(){
     var that = $(this);
     that[ that.attr( 'href' ) === hash ? 'addClass' : 'removeClass' ]( 'selected' );
    });
 })
 $(window).hashchange();
}); 

这项工作非常精彩。

这使用上面提到的hashchange插件,因此请确保在使用此函数之前将脚本插入到您的脑中。

答案 2 :(得分:0)

如果您使用https://github.com/cowboy/jquery-bbq

,可以使用以下代码来帮助您入门
$(document).ready(function(){
  $("#home-link").click(function(){
    $("#main_info2").hide();
    $("#main_info").show();
  });
  $("#info-link").click(function(){
    $("#main_info").hide();
    $("#main_info2").show();
  });
  $("#gyms-link").click(function(){
    $("#main_info").hide();
    $("#main_info2").show();
  });
  $("#contact-link").click(function(){
    $("#main_info").hide();
    $("#main_info2").show();
  });


  $(window).bind( 'hashchange', function(e) {
    url = $.deparam.fragment();
    url && $( 'a[href="#' + url + '"]' ).trigger('click');
  });
  $(window).trigger('hashchange');
});