将URL分解为其组成部分

13

我正在使用Javascript,想将一个URL字符串拆分为它的组成部分,例如主机名、路径和查询参数。

我需要这样做是为了获取其中一个查询参数,它本身是一个URL并且在原始URL字符串中被编码。

我感觉在Javascript中应该有一种简单的方法来实现这一点。也许像这样:

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

17

DOM解决方案是否适用于查询参数,还是只能足够特定地返回整个查询字符串而不将其分解为特定的键值对并对它们进行解码? - Chris Dutrow
DOM解决方案只会返回整个查询字符串。你可以使用split()函数在"&"上进行分割,然后循环遍历这些结果,并使用split()函数在"="上进行分割,这将给你一个键/值对。将键与你要搜索的键进行测试,跳出循环并返回值。 - Tak

3
<script type="text/javascript" language="javascript">
newURL = window.location.protocol + "//" + window.location.host + "/" + window.location.pathname;
</script>

Hope this will help..

2
在javascript中,您可以使用split()函数对参数进行拆分,并使用location对象来获取协议和域名--就像Carl建议的那样。
另外,您也可以像Tak建议的那样使用parseUri。
如果您已经在项目中使用jQuery,则还有一个jQuery插件可以使解析更加容易:https://github.com/allmarkedup/jQuery-URL-Parser#readme 示例:
$.url('http://allmarkedup.com?sky=blue&grass=green').param('sky'); // returns 'blue'

1
可能不是最好的方法,但在JavaScript中获取查询字符串的简单方法是使用类似以下方式的代码:
 a = "http://www.domain.com?queryArg1=somequeryargument";
 query = a.substring(a.indexOf('?')+1);

你可以根据 & 和 = 将查询分割,以获取所需的任何参数。

如果这个方法有点低级,对不起啦 :P

编辑: 我刚写了一个小的 JavaScript 对象来获取 URL 查询参数(类似于)在你的例子中。只在 Chrome 中测试过,但理论上应该可以工作 :)

//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'));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接