розташування вікна javascript href без хешу?


80

Я маю:

var uri = window.location.href;

Це забезпечує http://example.com/something#hash

Який найкращий і найпростіший спосіб отримати весь шлях без #hash?

uri    = http://example.com/something#hash
nohash = http://example.com/something

Я спробував використати, location.origin+location.pathnameякий працює не в кожному браузері. Я спробував використати, location.protocol+'//'+location.host+location.pathnameщо для мене виглядає як якесь безглузде рішення.

Який найкращий і найпростіший спосіб це зробити? може я запитую для location.hash і намагаюся substr () це з uri?


1
До речі, якщо ви робите це лише для того, щоб зробити посилання на a #sectionна тій самій сторінці, просто встановіть посилання href #section. Вам не потрібно отримувати базову URL-адресу сторінки, а потім об'єднувати хеш в кінці.
Web_Designer

Відповіді:


91

location.protocol+'//'+location.host+location.pathname правильний синтаксис, якщо ви не дбаєте про номер порту чи рядок запиту

Якщо вам все одно:

https://developer.mozilla.org/en/DOM/window.location

location.protocol+'//'+
  location.host+
  location.pathname+
 (location.search?location.search:"")

або

location.protocol+'//'+
  location.hostname+
 (location.port?":"+location.port:"")+
  location.pathname+
 (location.search?location.search:"")

Ви також можете просто зробити a location.href.replace(location.hash,"")

Або створіть об’єкт URL-адреси :

const url = new URL("https://www.somepage.com/page.hmtl#anchor") //(location.href);
console.log(url)
url.hash="";
console.log(url)


Ви втратили рядок запиту (якщо такий був) там
Квентін

1
Схоже, location.host включає порт.
Borgenk

14
Це останнє трохи про те, що .replace(location.hash,'')це чудово, і саме те, заради чого я тралював.

@GrigoryKalabin - все одно повинен працювати:var url = "http://example.com#example"; var lnk = document.createElement("a"); lnk.href=url; alert(lnk.hash);
mplungjan

8
location.href.replace (location.hash, "") не працюватиме належним чином, оскільки: example.com # example # дасть '' як хеш; example.com # example # a дасть '#a' як хеш; window.location.href.split ('#') [0] є правильним рішенням.
ZPiDER

84
var uri = window.location.href.split("#")[0];

// Returns http://example.com/something

var hash = window.location.hash;

// Returns #hash

3
Знак хеш не входить до другої частини цього масиву
Брайан Лейшман,

Я включив виправлення! :-)
Каверна

3
Це не працює. "foo#bar#baz".split("#") == "bar"
rgov

6
Для хешу просто використовуйте location.hash.
Суміт

18
location.href.replace(location.hash,"")

(location+'').href.replace(location.hash,"")працює у firefox (місцезнаходження не є звичайним рядком)
Таха Джахангір

Але будьте обережні, location.hashколи url - somehting.com/#
Таха Джахангір,

Як не дивно для мене, це не зламається, якщо location.hashвоно міститься деінде в URL-адресі. Наприклад, " example.com/#example ". Тому що location.hashмістить провідний "#". За винятком випадків, коли хеш порожній, як зазначено вище.
Ben J


7

Коротші рішення:

  • без рядка запиту та хешу location.href.split(location.search||location.hash||/[?#]/)[0]

  • тільки без хешу location.href.split(location.hash||"#")[0]

(Я зазвичай використовую перший)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.