2015-01-14 14 views
6

Tôi đang cố gắng để phân tích url trong javascript, tôi thấy cách sau:Phân tích url trong javascript hoặc angularjs

var getLocation = function(href) { 
    var l = document.createElement("a"); 
    l.href = href; 
    return l; 
}; 
var l = getLocation("http://example.com:3000/path"); 
var host = l.host; // example.com 
var port = l.port; // 3000 

Nhưng tôi phải đối mặt với một vấn đề nếu các địa điểm này:

http://TLVS0015:3000/cti/YTest // the parse found the port, but its not found the host 

http://ctmwe:80/ReportServer/ReportService2010.asmx // the parse found the host, but don't found the port 

Có cách nào khác để làm phân tích cú pháp?

+0

Hãy thử làm 'l.hostname' – aug

+0

http://james.padolsey.com/javascript/parsing- urls-with-the-dom/ – smarber

+0

NẾU bạn đã có url, bạn sẽ không được tốt hơn để tách() và nhận được các thành phần? (Thay vào đó tạo ra một đối tượng tôi có nghĩa là) Nếu có bất kỳ lợi ích perf của làm theo cách này chứ không phải sau đó sử dụng dây? – atmd

Trả lời

7

Nếu bạn không cần phải hỗ trợ trình duyệt Internet Explorer (http://caniuse.com/#feat=url), sử dụng URL. Sử dụng hostname thay vì host.

> new URL("http://TLVS0015:3000/cti/YTest").hostname 
tlvs0015 

Cổng 80. Cổng 80 là mặc định, vì vậy nó thừa, do đó "".

> new URL("http://ctmwe:80/ReportServer/ReportService2010.asmx").port 
"" 

port = URL.port === "" ? 80 : URL.port 

Để biết thêm thông tin về URL(), consult the MDN API documents.

Note: tính đến tháng Bảy năm 2017, URLkhông được hỗ trợ bởi trình duyệt Internet Explorer 11: http://caniuse.com/#feat=url

+10

Lưu ý rằng 'URL' là một tính năng thử nghiệm không được hỗ trợ trong Internet Explorer kể từ tháng 4 năm 2015. –

+0

Và tiếp tục vào tháng 7 năm 2016 –

+0

tháng 3 năm 2017 - có vẻ như không bao giờ được hỗ trợ trong IE, nhưng nó nằm trong Edge 14 và 15. http://caniuse.com/#feat=url –

12

Nguồn: - https://gist.github.com/jlong/2428561

var parser = document.createElement('a'); 
parser.href = "http://example.com:3000/pathname/?search=test#hash"; 

parser.protocol; // => "http:" 
parser.hostname; // => "example.com" 
parser.port;  // => "3000" 
parser.pathname; // => "/pathname/" 
parser.search; // => "?search=test" 
parser.hash;  // => "#hash" 
parser.host;  // => "example.com:3000" 
Các vấn đề liên quan