如何用另一个响应替换窗口的URL哈希?

Bar*_*din 54 javascript hash jquery replace attr

我试图用替换方法更改散列URL(document.location.hash),但它不起作用.

$(function(){
 var anchor = document.location.hash;
 //this returns me a string value like '#categories'

  $('span').click(function(){

     $(window).attr('url').replace(anchor,'#food');
     //try to change current url.hash '#categories'
     //with another string, I stucked here.
  });

});
Run Code Online (Sandbox Code Playgroud)

我不想更改/刷新页面,我只想更换URL而不做任何回复.

注意:我不想用href ="#food"解决方案来解决这个问题.

Fab*_*tté 105

使用locationwindow.location代替,document.location因为后者是非标准的.

window.location.hash = '#food';
Run Code Online (Sandbox Code Playgroud)

这将使用您为其设置的值替换URL的哈希值.

参考

  • 如果您希望在用户单击锚标记时更改URL中的哈希值,为什么不使用"<a href="#bar"> Foo </a>"? (2认同)
  • +1 Spooky,即使他正在开发插件,他也可能无法编辑页面的来源. (2认同)
  • @barlasapaydin没问题,也是http://jsfiddle.net/ult_combo/5yKr6/1/(我稍微编辑了你的插件,不确定这是否是你要求我做的) (2认同)
  • 这是一个更干净、注释更完善的版本:[Fiddle](http://jsfiddle.net/ult_combo/5yKr6/3/)。题外话,到目前为止,我在一个赞成的答案中得到了第一次否决,多么可爱`:)`(我不是在抱怨匿名的否决者,但如果你觉得我可以改进我的答案,然后评论它) 。 (2认同)
  • 奇怪的是,“document.location.hash”对我有用,而“window.location.hash”却没有。 (2认同)

arc*_*rcs 29

您可能更喜欢这个问题的答案.

不同之处在于history.replaceState()您不会滚动到锚点,只能在导航栏中替换它.它是由所有主要浏览器,支持.

history.replaceState(undefined, undefined, "#hash_value")
Run Code Online (Sandbox Code Playgroud)

  • 此答案应设置为已接受 - 使用此方法除了更改哈希值之外不会进行任何更改.由于最初的问题包含以下条件:"我不想更改/刷新页面,我只想更换URL而不做任何回复." (5认同)
  • 事实上,这个解决方案很棒,特别是如果不需要添加新的历史记录条目。我还注意到 # 需要位于此行工作的 url 末尾。 (2认同)