해시가없는 자바 스크립트 창 위치 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를 쿼리하고 uri에서 이것을 substr ()하려고합니까?


1
BTW, #section같은 페이지에 링크하기 위해이 작업을 수행하는 경우 링크 href를로 설정하십시오 #section. 페이지의 기본 URL을 가져온 다음 끝에 해시를 연결할 필요가 없습니다.
Web_Designer 2013

답변:


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:"")

당신은 또한 할 수 있습니다 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)


쿼리 문자열 (있는 경우)을 잃어 버렸습니다
Quentin

1
location.host에 포트가 포함되어있는 것 같습니다.
Borgenk 2011

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
해시 기호는 해당 배열의 두 번째 부분에 포함되어 있지 않습니다
브라이언 Leishman을

나는 수정을 포함했다! :-)
Caverna

3
이것은 작동하지 않습니다. "foo#bar#baz".split("#") == "bar"
rgov

6
해시의 경우 location.hash.
Sumit aug.

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

(location+'').href.replace(location.hash,"")(위치가 일반 문자열이 아닌) 파이어 폭스에서 작동
타하 자한 기르

그러나 신경 location.hashURL이 somehting.com/# 때 ''입니다
타하 자한 기르

놀랍게도 location.hashURL의 다른 곳에가 포함되어 있으면 이것이 깨지지 않습니다 . 예 : " example.com/#example ". 때문에 location.hash선두 "#"을 포함한다. 위에서 지적한 것처럼 해시가 비어있는 경우를 제외하고.
Ben J


7

더 짧은 솔루션 :

  • 쿼리 문자열과 해시없이 location.href.split(location.search||location.hash||/[?#]/)[0]

  • 해시없이 location.href.split(location.hash||"#")[0]

(보통 첫 번째를 사용합니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.