我需要使用URL中的Anchor(#)更新我的页面

时间:2013-06-03 11:45:09

标签: javascript html ajax hashchange

的index.php

<html>
 <head>
  <title>My Title</title>
  <script type="text/javascript">
   function getLink(data) {
    document.getElementById("box").innerHTML="This is "+data;
   }
  </script>
 </head>
 <body>
  <a href="#home" onClick="getLink('Home')">Home</a><br />
  <a href="#profile" onClick="getLink('Profile')">Profile</a><br />
  <a href="#message" onClick="getLink('Message')">Message</a><br />
  <a href="#setting" onClick="getLink('Setting')">Setting</a><br />
  <hr />
  <div id="box"></div>
 </body>
</html>

输出

Home
Profile
Message
Setting

<小时/> 这是Home

正如代码所示,当我点击任意Div时我的link内容已更新,但问题是用户goes back点击Back Button of Browser我的Div内容时{1}}不要改变 我希望用户Goes BackGoes Forward或他直接将路径放在address bar www.*****/index.php#profile Div的内容中应该更改。

注意
我使用document.location.hash来获取hash的值,如下所示:

<head>
 <script>
  var hashValue=document.location.hash;
  alert(hashValue);
 </script>
</head>

但仅适用于用户goes back然后refresh the page

Plz帮助我如何实现这一目标:(

4 个答案:

答案 0 :(得分:2)

您需要使用hashchange事件:

function hash_changed() {
    var data = document.location.hash.substr(1);
    var box = document.getElementById("box");

    if (data) {
        // inner page
        box.innerHTML="This is " + data;
    }
    else {
        // homepage
        box.innerHTML = "";
    }
}

window.onhashchange = function () {
    hash_changed();
};

window.onload = function () {
    hash_changed();
};

当您使用hashchange事件时,还有 无需为您的链接设置onclick

<a href="#home">Home</a>
<a href="#profile">Profile</a>
<a href="#message">Message</a>
<a href="#setting">Setting</a>

当用户点击链接时,哈希会自动更改(链接的href属性), 并且hashchange事件被解雇了。

点击此处DEMO


第一次

当用户第一次使用哈希来到您的页面时:

http://fiddle.jshell.net/B8C8s/9/show/#message

我们必须在此处显示所需页面(message),因此我们必须运行hash_changed()函数 我们第一次在上面声明。为此,我们必须等待DOM ready或window.onload

答案 1 :(得分:0)

检查HTML5历史记录API。它允许您使用浏览器历史记录

HTML5 history api

答案 2 :(得分:0)

$(window).on('hashchange', function() {
     alert(location.hash);
});

或window.onhashchange事件,如果您不想使用jQuery

答案 3 :(得分:0)

如果您打算使用AJAX,除非您的意图具有教育意义,否则您真的希望使用jQuery而不是原始javascript。 jQuery现在只是网络的支柱。

如果你必须使用这些哈希......

使用jQuery Special Events,并使用hashchange事件:

<a href='#home'>Home</a>

脚本:

$(window).on('hashchange', function() {
    $('#box').html("This is "+event.fragment);
});

但是,对于您的方案......

您根本不需要使用这些#值,因为您根据所提供的代码传递函数参数中的值,只需执行以下操作:

<a href="" onClick="getLink('Home');return false;">Home</a><br />

或者(最好是,根据标签使用AJAX),您可以使用jQuery及其内置选择器点击事件,使用Event Listeners

<a href='javascript:void();' class='divLink' id='home'>Home</a><br/>

脚本很简单:

$('.divLink').click(function(){
    $('#box').html("This is "+$(this).id());
}