如何在链接中替换哈希

时间:2018-04-05 12:06:27

标签: jquery fragment-identifier

我想将url的哈希值添加到导航的href属性中:

<ul>
  <li><a href="/bla">Bla</a></li>
  <li><a href="/bli">Bli</a></li>
  <li ><a href="/blu">Blu</a></li>
</ul>

我有这段代码:

  $(window).on('hashchange', function (e) {
      console.log(location.hash);
      $("a").attr('href', function(_, href){
        return href + window.location.hash
      });
  });
  if (window.location.hash) {
      $(window).trigger('hashchange')
  }

现在,当我点击一个子菜单或手动输入url时,菜单会更新如下:

<ul>
  <li><a href="/bla#hashVlaue">Bla</a></li>
  <li><a href="/bli#hashVlaue">Bli</a></li>
  <li ><a href="/blu#hashVlaue">Blu</a></li>
</ul>

这很有效。但是现在,如果我再次单击子菜单,则会附加散列而不会替换散列。由于在单击子菜单时未重新加载页面,因此链接开始如下所示:

<a href="/blu#hashOne#hashTwo#Three#Four">Blu</a>

我只想要一个哈希,如果已经有一个,它应该被替换。我该怎么做?

1 个答案:

答案 0 :(得分:1)

您始终在代码中附加href。检查href + window.location.hash回调中的hashchange行。这就是为什么它总是附加到之前的值。你需要的是

return href.split("#")[0] + window.location.hash

干杯:)