从网址中删除哈希

mik*_*ked 0 hash jquery

我有以下代码:

 jQuery(document).ready(function($) {
   $('.tab-title').on('click', function(e) {
      window.location.hash = $(this).attr('href');
      e.preventDefault();
    var _self = $(this);
    $('.tab').removeClass('active');
    _self.parent().addClass('active');
    });
});
Run Code Online (Sandbox Code Playgroud)

和我的PHP

<div class="tab active">
    <a href="<?php the_field('service_name');?>" class="tab-title"><?php the_field('service_title'); ?></a> 
</div> 
 <div class="tab-content">  
<h2><?php the_field('service_title'); ?> </h2>
    <p><?php the_field('service_desc'); ?></p>
    <p><?php the_field('service_area');?></p>
</div> 
Run Code Online (Sandbox Code Playgroud)

网站网址: mysite.com/services/marketing/#internet

问题是网站网址中包含的(#)。是否可以从网址中删除它?

Ahm*_*yan 5

尝试这个:

history.pushState("", document.title, window.location.pathname);
Run Code Online (Sandbox Code Playgroud)

已编辑

如果您只想#从网址中删除,请尝试以下代码:

history.pushState({}, document.title, location.href.replace('#', "/"));
Run Code Online (Sandbox Code Playgroud)

pushState()方法

pushState()具有三个参数:状态对象,标题(当前被忽略)和(可选)URL。让我们更详细地检查这三个参数:

  • 状态对象:状态对象是一个JavaScript对象,它与pushState()创建的新历史记录条目相关联。每当用户导航到新状态时,都会触发popstate事件,并且该事件的state属性包含历史记录条目的状态对象的副本。

    状态对象可以是任何可以序列化的对象。由于Firefox将状态对象保存到用户的磁盘上,以便用户重新启动浏览器后可以将其还原,因此我们对状态对象的序列化表示施加了640k个字符的大小限制。如果将序列化表示形式大于此状态的状态对象传递给pushState(),则该方法将引发异常。如果您需要更多空间,建议您使用sessionStorage和/或localStorage。

  • title: Firefox当前会忽略此参数,尽管将来可能会使用它。在此处传递空字符串应该可以防止将来对方法的更改。或者,您可以为要移动的州传递简短的标题。
  • URL:新历史记录条目的URL由此参数指定。请注意,浏览器在调用pushState()之后将不会尝试加载此URL,但是可能会稍后尝试加载URL,例如,在用户重新启动浏览器之后。新的URL不必是绝对的。如果是相对的,则相对于当前URL进行解析。新网址必须与当前网址具有相同的来源;否则,pushState()将引发异常。该参数是可选的。如果未指定,则将其设置为文档的当前URL。

查看此以获得更多信息History_API