2011-07-03 41 views
10

Tôi đang sử dụng javascript và muốn lấy chuỗi URL mà tôi có và chia nhỏ thành các thành phần của nó như máy chủ lưu trữ, đường dẫn và đối số truy vấn.Chia URL thành các thành phần

Tôi cần thực hiện việc này để nhận được một trong các đối số truy vấn, chính nó là một URL và do đó được mã hóa trong chuỗi URL gốc.

Tôi cảm thấy có một cách dễ dàng để thực hiện việc này trong Javascript. Có lẽ cái gì đó trông như thế này:

var what_I_Want = url("http://www.domain.com?queryArg1=somequeryargument").getQueryArgumentValue("queryArg1"); 

Trả lời

14

Chức năng parseUri sẽ làm tất cả mọi thứ bạn cần

Sửa Hoặc bạn có thể get the DOM to do the hard work cho bạn và truy cập các thuộc tính trên một mới được tạo ra a đối tượng cho các bộ phận khác nhau của URL.

+0

Liệu các công việc giải pháp DOM cho các đối số truy vấn hay nó chỉ nhận được đủ cụ thể để trả lại toàn bộ chuỗi truy vấn mà không phá vỡ nó vào, cặp khóa-giá trị cụ thể và giải mã chúng? –

+0

Giải pháp DOM sẽ chỉ trả lại toàn bộ chuỗi truy vấn. Bạn có thể 'split()' trên "&" sau đó lặp qua các kết quả đó và 'split()' trên "=" sẽ cho bạn cặp khóa/val. Kiểm tra khóa so với khóa bạn đang tìm kiếm, thoát khỏi vòng lặp và trả về giá trị val. – Tak

+0

Các parseuri làm việc rất tốt –

1

Có lẽ không phải là cách lớn nhất để làm việc đó nhưng một phương pháp đơn giản để có được chuỗi truy vấn trong JavaScript sẽ được chỉ cần sử dụng một cái gì đó dọc theo dòng:

a = "http://www.domain.com?queryArg1=somequeryargument"; 
query = a.substring(a.indexOf('?')+1); 

Sau đó bạn có thể chia các truy vấn lập dựa trên của & và một lần nữa trên = để có được bất cứ thông số nào bạn cần.

Xin lỗi nếu điều này không phải là rất hữu ích vì nó là một chút của một phương pháp công nghệ thấp: P

EDIT: Chỉ cần viết một đối tượng JavaScript chút nhanh chóng để có được các thông số truy vấn URL cho bạn (loại tương tự) trong ví dụ của bạn. Chỉ thử nghiệm nó trong chrome nhưng về mặt lý thuyết nó phải làm việc :)

//Quick and dirty query Getter object. 
function urlQueryGetter(url){ 
    //array to store params 
    var qParam = new Array(); 
    //function to get param 
    this.getParam = function(x){ 
    return qParam[x]; 
    } 

    //parse url 
    query = url.substring(url.indexOf('?')+1); 
    query_items = query.split('&'); 
    for(i=0; i<query_items.length;i++){ 
     s = query_items[i].split('='); 
     qParam[s[0]] = s[1]; 
    } 

} 

//Useage 
var bla = new urlQueryGetter("http://www.domain.com?queryArg1=somequeryargument&test=cheese"); 
alert(bla.getParam('test')); 
1

Trong javascript bạn có thể làm điều này bằng cách sử dụng split() cho params và sử dụng các đối tượng vị trí cho các giao thức và miền - như Carl đề nghị

Ngoài ra bạn có thể sử dụng parseUri như Tak gợi ý

Ngoài ra còn có một plugin jQuery mà làm cho phân tích dễ dàng hơn nếu bạn đang sử dụng jQuery trong dự án của bạn: https://github.com/allmarkedup/jQuery-URL-Parser#readme

Ví dụ:

01.
$.url('http://allmarkedup.com?sky=blue&grass=green').param('sky'); // returns 'blue' 
2
<script type="text/javascript" language="javascript"> 
newURL = window.location.protocol + "//" + window.location.host + "/" + window.location.pathname; 
</script> 

Hope this will help.. 
Các vấn đề liên quan