2016-07-07 3 views
0

У меня есть следующий код:Удалить хэш из URL

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'); 
    }); 
}); 

и мой 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> 

Сайт URL: mysite.com/services/marketing/#internet

Проблема заключается в (#), которые включены в адрес сайта. Можно ли удалить это из URL?

+0

Вы хотите удалить только # или #internet? – Sree

+0

Но вы явно устанавливаете его в своем коде. Вы просто не хотите его устанавливать, т. Е. Удалите строку 'window.location.hash' или что-то еще? Он служит цели: он позволяет кому-то, кто закладок или скопировал/вставлял URL-адрес, вернуться к правильной вкладке, если у вас есть эквивалентный код для его обработки при запуске. – Rup

+0

@Sree Я хочу удалить только (#) – miked

ответ

4

Попробуйте это:

history.pushState("", document.title, window.location.pathname); 

EDITED

Попробуйте следующий код, если вы хотите удалить только # из URL:

history.pushState({}, document.title, location.href.replace('#', "/")); 

PushState() метод

pushState() принимает три параметра: объект состояния, заголовок (который в настоящее время игнорируется) и (необязательно) URL. Давайте рассмотрим каждый из этих трех параметров более подробно:

  • состояния объект: состояния объекта является объектом JavaScript, который связанными с новой записью истории, созданной PushState(). Всякий раз, когда пользователь переходит в новое состояние, событие popstate имеет значение , а свойство состояния события содержит копию объекта состояния истории записи .

    Объект состояния может быть любым, что может быть сериализовано. Поскольку Firefox сохраняет объекты состояния на диск пользователя, поэтому они могут быть восстановлены после перезапуска браузера, мы накладываем ограничение размера из 640 тыс. Символов в сериализованном представлении состояния объекта. Если вы передадите объект состояния, сериализованное представление которого больше, чем pushState(), метод выдает исключение. Если вам нужно больше места, чем это, вам рекомендуется использовать sessionStorage и/или localStorage.

  • title: Firefox в данный момент игнорирует этот параметр, хотя он может использовать в будущем. Передача пустой строки здесь должна быть безопасной против будущих изменений метода. Кроме того, вы можете передать короткий заголовок для состояния, в котором вы перемещаетесь.
  • URL: URL-адрес новой записи истории задается этим параметром. Примечание , что браузер не попытается загрузить этот URL-адрес после вызова pushState(), но он может попытаться загрузить URL-адрес позже, например после перезапуска пользователя. Новый URL не обязательно должен быть absolute; если он относительный, он разрешен относительно текущего URL. Новый URL-адрес должен иметь тот же источник, что и текущий URL; в противном случае pushState() выдаст исключение.Этот параметр равен опционально; если он не указан, он установлен на текущий адрес документа .

Посмотрите на это для получения дополнительной информации History_API

+1

Я думаю, что вы правы, он хочет API истории, но похоже, что он хочет также имя выбранной вкладки в конце URL-адреса - и в заголовке тоже я бы догадался - и я видел 'null' чаще, чем' '' 'для каких-либо данных. – Rup

+0

@Rup я обновляю код – miked

+0

@MikeD Я отредактировал ответ. Добавлены некоторые подробности о методе pushState. Ищите больше информации пожалуйста :) –

0

После многих часов и с ясным умом я найти решение.

jQuery(document).ready(function($) { 
    $('.tab-title').on('click', function(e) { 
     window.location.hash = $(this).attr('href'); 
     history.pushState({}, document.title, location.hash.replace('#', "/")); 
     e.preventDefault(); 
    var _self = $(this); 
    $('.tab').removeClass('active'); 
    _self.parent().addClass('active'); 
    }); 
}); 

, а затем я следую ручному способу добавления моего URL-адреса на очень страницу.

Смежные вопросы