2010-10-20 49 views
1

我想用#jQuery响应url后的变化。我做了一些搜索,但我认为我没有使用正确的搜索条件。Javascript响应URL中#部分的变化

要清楚,我希望能够提供外部链接到一个网页,像这样:

<a href="example.com/foo/#home">home</a> 

,并包括内部链接动态更改页面上的内容:

<a href="#site-index">site index</a> 

Gmail会这样做。例如,我可以将您直接链接到您发送的邮箱:https://mail.google.com/mail/u/0/#sent

谢谢。

回答

0

我相信你想要的术语是片段。

+0

在JS中:'document.location.hash' – jball 2010-10-20 18:38:17

2

这是你在找什么:

http://haineault.com/blog/37/

(function(){ 
    anchor = document.location.hash, handlers = []; 

    jQuery.extend({ 
    anchorHandler: { 
     add: function(regexp, callback) { 
     if (typeof(regexp) == 'object') { 
      jQuery.map(regexp, function(arg){ 
      args = {r: arg[0], cb: arg[1]};});} 
     else args = {r: regexp, cb: callback}; 
     handlers.push(args); 
     return jQuery.anchorHandler; 
     } 
    } 
    })(document).ready(function(){ 
    jQuery.map(handlers, function(handler){ 
     match = anchor.match(handler.r) && anchor.match(handler.r)[0] || false; 
     if (match) handler.cb.apply(this, [match, (anchor || false)]);});}); 
})(); 

添加触发这样的:

$.anchorHandler 
    .add(/\#ch\-cheatsheet/, h.comment.showCheatsheet) 
    .add(/\#comment\-compose/, h.comment.showCompose) 
    .add(/\#comment\-\d+/,  h.comment.focus); 
0

这里是一个超级简单的例子:

if (location.hash != "") 
{ 
    Location.hash.replace(
     new RegExp("([^#?=&]+)(=([^&]*))?", "g"), 
      function($0, $1, $2, $3){ 
       eval($1 + "='" + $3 + "'"); 
      }); 
} 

这个我已经在过去使用的方法(在一种哈克的方式)给eval的所有变量,这会变成如下:

#id=1&blah=cheese 

与正确的值id,嗒嗒的JavaScript的变量,快速,简单:)

+0

当正则表达式被称为“超级简单”时,我总是会笑一点。 – 2010-10-20 18:51:41

+0

@Jonathan,当人们无缘无故地跳上反正则表达式的行列时,我总是笑,如果你说的语言是一个简单的正则表达式,否则你不会理解,正则表达式就像任何其他语言一样。这不是一个简单的c程序难以理解。 – 2010-10-20 18:56:22

0

JQuery没有响应URI中哈希变化的事件。文档准备就绪后,您可以检查散列并适当更改页面。您可以拦截您的哈希锚点击事件并在此后进行适当的响应。或者,您可以通过在计时器上检查window.location.hash来创建合成的“散列更改”事件。