2012-03-01 23 views
24

Tôi đang tìm một cách gọn gàng để lấy URL của tài liệu hiện tại trong Javascript.URL hiện tại không có thông số, băm, http: //

  • URL phải sạch sẽ các thông số (? Argument1 = bla & argument2 = bla)
  • URL phải sạch thẻ băm (#jumppoint)
  • http/https cần được loại bỏ/hợp nhất thành http

Tôi biết tôi có thể lấy URL hiện tại có location.href và sau đó sử dụng một số cụm từ thông dụng để xóa sạch nhưng có thể có giải pháp đẹp hơn/sạch hơn để loại bỏ rác?

+0

Tôi bị cám dỗ để downvote chỉ để gọi bộ phận quan trọng của url "rác"! – Douglas

+0

@Douglas Tầm quan trọng là chủ quan. Nó hoàn toàn chính đáng rằng trong bối cảnh của chức năng này chỉ có máy chủ là phần liên quan. –

+0

ptorocol cũng có thể là ftp: bạn có cần xem xét nó không? – kirilloid

Trả lời

46

Có nhiều thông số khác so với href trong window.location. Xem tài liệu tham khảo đầy đủ ở đây: https://developer.mozilla.org/en/DOM/window.location

gì bạn đang tìm kiếm là một khởi động có thể là window.location.hostname: "tên máy chủ (không có số cổng hoặc vuông dấu ngoặc)"

Từ URL mẫu http://[www.example.com]:80/search?q=devmo#test tên máy chủ sẽ là www.example.com.

Nếu bạn cũng muốn bao gồm đường dẫn và buộc một http: // giao thức, hãy thử:

'http://' + window.location.hostname + window.location.pathname; 

Là một mặt lưu ý, một thủ thuật tiện lợi để có được các thông số tương tự từ một URL khác hơn ngoài cửa sổ. vị trí là tạo ra một neo trống:

var a = document.createElement('a'); 
a.href = 'http://www.example.com:80/search?q=devmo#test'; 

console.log('http://' + a.hostname + a.pathname); 
+1

Tôi nghĩ họ cũng muốn tên đường dẫn. – jfriend00

+0

@ jfriend00 yea, các tài liệu phải đủ để tìm ra mọi thứ, nhưng tôi cũng thêm vào đó để làm rõ. – David

+1

''http: //' + window.location.hostname + window.location.pathname;' bạn đã quên cổng – Alex

0

This trang chỉ ra rằng bạn có thể có thể sử dụng window.location.host để có được những phần bạn đang thực sự quan tâm đến việc tôi đã không kiểm tra nó, mặc dù..

+8

Sau đó kiểm tra ... – Konerak

2

Bạn có document.location đối tượng, vì vậy:

var oLoc = document.location, 
    sUrl = oLoc.protocol + oLoc.hostname; 
    // or "http://" + oLoc.hostname 
0

Hãy thử:

 

window.location.hostname; 
 
1

Bạn có thể sử dụng các chức năng thay thế để loại bỏ các hash và lập luận tìm kiếm và bình thường hóa https đến http:

url = url.replace(/#[^#]*$/, "").replace(/\?[^\?]*$/, "").replace(/^https:/, "http:"); 

Hoặc nếu tất cả những gì bạn thực sự muốn là miền và đường dẫn, bạn có thể sử dụng :

window.location.hostname + window.location.pathname 
27

Không ai trong số các câu trả lời cho giải quyết thực tế là giao thức có thể là http hoặc https như trong tiêu đề Ops.Với tiêu chí này, tôi đề nghị:

document.location.protocol +"//"+ document.location.hostname + document.location.pathname 
+1

"http/https phải được xóa/hợp nhất thành http" ... – David

+0

Nếu bạn có số cổng trong URL của mình, giải pháp này làm cho số cổng bị mất, tức là http: // localhost: 49346/trở thành http: // localhost. – Kris

2

Vui lòng thử đoạn này:

if (!window.location.origin){ 
 
    // For IE 
 
    window.location.origin = window.location.protocol + "//" + (window.location.port ? ':' + window.location.port : '');  
 
} 
 

 
url = window.location.origin + window.location.pathname; 
 
document.write('Origin url: ' + url);

+0

Điều này đã được trả lời từ lâu rồi. Và câu trả lời này là sai về câu hỏi vì nó vẫn sẽ cung cấp https: // làm giao thức gốc nếu trang là https - nhưng nó sẽ bỏ qua giao thức/readd nó như http. – bardiir

+0

Không có tên máy chủ lưu trữ bị thiếu trong mã cho IE? Giống như 'window.location.origin = window.location.protocol +" // "+ (window.location.port? ':' + Window.location.port: '') + '/' + window.location. hostname; ' – Alex

+0

có, nhưng không theo thứ tự đó: window.location.origin = window.location.protocol +" // "+ window.location.hostname + (window.location.port? ':' + window.location. Hải cảng : ''); – Zzirconium

Các vấn đề liên quan