Làm cách nào để lấy URL mà không có bất kỳ tham số nào trong JavaScript?


176

Nếu tôi sử dụng:

alert(window.location.href);

Tôi nhận được mọi thứ bao gồm cả chuỗi truy vấn. Có cách nào để lấy phần url chính không, ví dụ:

http://mysite.com/somedir/somefile/

thay vì

http://mysite.com/somedir/somefile/?foo=bar&loo=goo

Câu trả lời:


282

Điều này là có thể, nhưng bạn sẽ phải xây dựng nó thủ công từ locationđối tượng :

location.protocol + '//' + location.host + location.pathname

14
Lưu ý rằng bạn không cần cung cấp location.protatio vì tất cả các trình duyệt hiện đại (bao gồm IE6) sẽ tự động kế thừa giao thức hiện tại. tức là:'//' + location.host + location.pathname
JonnyReeves

10
@JonnyReeves Nếu bạn đang sử dụng nó trong tài liệu hiện tại, điều đó đúng: điểm tốt. Có những lúc có thể cần thiết, ví dụ: nếu xuất URL dưới dạng văn bản thuần túy.
lonesomeday

1
@lonesomeday phản hồi của bạn ngụ ý đó là cách duy nhất, không phải vậy.
Oddman

5
Đó là cổng bị thiếu, vì vậy điều này sẽ trả về kết quả không chính xác cho tranghttp://www.example.com:8080/asdf.html?foo=bar
izogfif

3
Bạn có thể lưu một vài ký tự location.origin, mà tôi tin rằng cũng giải quyết mối quan tâm của @ izogfif.
Bộ giải mã

171

Mọi câu trả lời đều khá phức tạp. Đây:

var url = window.location.href.split('?')[0];

Ngay cả khi một? không có mặt, nó vẫn sẽ trả về đối số đầu tiên, đó sẽ là URL đầy đủ của bạn, trừ chuỗi truy vấn.

Nó cũng không theo giao thức, nghĩa là bạn thậm chí có thể sử dụng nó cho những thứ như ftp, itunes.etc.


39
trong trường hợp bạn cần gỡ bỏ các neowindow.location.href.split(/[?#]/)[0];
Bahattin Ungormus

thực sự mọi câu trả lời đều khá phức tạp
mehmet

@mehmet tất cả các tai nếu bạn có một cách tiếp cận đơn giản hơn :)
Oddman

1
@Oddman, tôi hoàn toàn không nhớ những gì tôi đã nghĩ, nhưng tôi đoán đó có thể là một tuyên bố khẳng định :))
mehmet

Tại sao (nếu có) câu trả lời này tốt hơn câu trả lời được chấp nhận ??
Vishal - JAVA - CQ

16

Sử dụng indexOf

var url = "http://mysite.com/somedir/somefile/?aa";

if (url.indexOf("?")>-1){
url = url.substr(0,url.indexOf("?"));
}

5
var url = "tp://mysite.com/somedir/somefile/?foo=bar&loo=goo"    

url.substring(0,url.indexOf("?"));

3
Giả định này, tham số đó được xác định. Tốt hơn nhiều làurl.split('?')[0]
Actimel

5

Bạn có thể sử dụng một biểu thức thông thường: window.location.href.match(/^[^\#\?]+/)[0]


5

Bạn có thể concat originpathname, nếu có một cổng như example.com:80, nó cũng sẽ được bao gồm.

location.origin + location.pathname

2

Nếu bạn xem tài liệu, bạn có thể chỉ lấy các thuộc tính bạn quan tâm từ windowđối tượng, tức là

protocol + '//' + hostname + pathname
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.