У меня есть URL-адрес, как:, http://example.com#something
как удалить #something
, не вызывая обновления страницы?
Я попытался следующее решение:
window.location.hash = '';
Однако это не удаляет символ хеша #
из URL.
javascript
window.location
fragment-identifier
Том Леман
источник
источник
Ответы:
Начальный вопрос:
или
оба вернут URL без хэша или чего-либо после него.
Что касается вашего редактирования:
Любое изменение
window.location
приведет к обновлению страницы. Вы можете изменить его,window.location.hash
не вызывая обновления (хотя окно будет отображаться, если ваш хеш соответствует идентификатору на странице), но вы не можете избавиться от знака хеша. Выбери что хуже ...САМЫЙ СОВРЕМЕННЫЙ ОТВЕТ
Правильный ответ о том, как сделать это, не жертвуя (полная перезагрузка или оставив там хэш-знак), находится здесь . Оставив здесь этот ответ, хотя он и является оригинальным в 2009 году, тогда как правильный ответ, использующий новые API браузеров, был дан через 1,5 года.
источник
Решение этой проблемы гораздо более доступно в наши дни. HTML5 History API позволяет манипулировать адресную строку для отображения любого URL в пределах текущего домена.
Рабочая демонстрация: http://jsfiddle.net/AndyE/ycmPt/show/
Это работает в Chrome 9, Firefox 4, Safari 5, Opera 11.50 и в IE 10. Для неподдерживаемых браузеров вы всегда можете написать изящно унизительный скрипт, который использует его там, где он доступен:
Таким образом, вы можете избавиться от хеш-символа, но не во всех браузерах - пока.
Примечание: если вы хотите заменить текущую страницу в истории браузера, используйте
replaceState()
вместоpushState()
.источник
(Слишком много ответов излишни и устарели.) Лучшее решение сейчас таково:
источник
history.pushState(null, null, ' ')
вместо этого, если вы хотите сохранить историю.null
дляstate
иtitle
параметров , в конечном счете делает.Просто и элегантно:
источник
.
вместо/
. Использование/
изменения URL-адреса для корневого пути.history.replaceState({}, document.title, location.href.substr(0, location.href.length-location.hash.length));
для моего варианта использования.history.replaceState(null, document.title, location.pathname + location.search);
Чтобы удалить хеш, вы можете попробовать использовать эту функцию
источник
Это также удалит завершающий хеш. например: http://test.com/123#abc -> http://test.com/123
источник
Как насчет следующего?
window.location.hash=' '
Обратите внимание, что я устанавливаю хэш для одного пробела, а не для пустой строки.
Установка хэша в недействительную привязку также не вызывает обновления. Такие как,
window.location.hash='invalidtag'
Но я считаю, что приведенное выше решение вводит в заблуждение. Кажется, это указывает на то, что на данной позиции есть привязка с заданным именем, хотя ее нет. В то же время использование пустой строки приводит к тому, что страница перемещается наверх, что иногда может быть неприемлемым. Использование пробела также гарантирует, что всякий раз, когда URL копируется, добавляется в закладки и снова посещается, страница обычно будет наверху, а пробел будет игнорироваться.
И, эй, это мой первый ответ на StackOverflow. Надеюсь, кто-то найдет это полезным и соответствует стандартам сообщества.
источник
Вы можете сделать это, как показано ниже:
history.replaceState({}, document.title, window.location.href.split('#')[0]);
источник
источник
поместите этот код в головной раздел
источник
источник
Я думаю, это было бы более безопасно
источник
Попробуйте следующее:
источник
Вот еще одно решение, чтобы изменить местоположение с помощью href и очистить хеш без прокрутки.
Волшебное решение объясняется здесь . Спецификации здесь .
ПРИМЕЧАНИЕ. Предлагаемый API теперь является частью стандарта WhatWG HTML Living.
источник
источник
Вы можете заменить хеш нулевым
источник