我有一个带有一些GET参数的URL,如下所示:

www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 

我需要得到c的全部值。我试图读取URL,但只得到m2。如何使用JavaScript执行此操作?


当前回答

我在这里举了一个例子。但它在jQuery中。希望它能帮助其他人:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.url.js"></script>

<!-- URL:  www.example.com/correct/?message=done&year=1990-->

<script type="text/javascript">
$(function(){
    $.url.attr('protocol')  // --> Protocol: "http"
    $.url.attr('path')          // --> host: "www.example.com"
    $.url.attr('query')         // --> path: "/correct/"
    $.url.attr('message')   // --> query: "done"
    $.url.attr('year')      // --> query: "1990"
});
</script>

其他回答

优雅、实用的解决方案

让我们创建一个包含URL参数名作为关键字的对象,然后我们可以通过其名称轻松提取参数:

// URL: https://example.com/?test=true&orderId=9381  

// Build an object containing key-value pairs
export const queryStringParams = window.location.search
  .split('?')[1]
  .split('&')
  .map(keyValue => keyValue.split('='))
  .reduce<QueryStringParams>((params, [key, value]) => {
    params[key] = value;
    return params;
  }, {});

type QueryStringParams = {
  [key: string]: string;
};


// Return URL parameter called "orderId"
return queryStringParams.orderId;

您可以通过以下函数实现:

function getParameter(parameterName){
        let paramsIndex = document.URL.indexOf("?");
        let params="";
        if(paramsIndex>0)
            params=document.URL.substring(paramsIndex+1, document.URL.length).split("&");
        let result = [];
        for(let i=0;i<params.length;i++)
        {
            console.warn(params[i].split("=")[0].toString()+ "," + params[i].split("=")[1].toString());
            var obj = {"key":params[i].split("=")[0].toString(),"value":params[i].split("=")[1].toString()};
            result.push(obj);
        }
        return passedValue = result.find(x=>x.key==parameterName).value;
    }

现在您可以使用getParameter(“parameterName”)获取参数值

JavaScript本身没有内置处理查询字符串参数的功能。

在(现代)浏览器中运行的代码可以使用URL对象(Web API)。URL也由Node.js实现:

//如果您想使用,可以从window.location.href获取url_string//当前页面的URLvar url_string=“http://www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5“;var url=新url(url_string);var c=url.searchParams.get(“c”);控制台日志(c);


对于较旧的浏览器(包括Internet Explorer),可以使用此polyfill。

您还可以对URLSearchParams使用一个,并提取查询字符串,以通过window.location.search.substring(1)传递给它。


您也可以使用URL之前的原始版本的代码。上面的polyfill是健壮的,经过了很好的测试,但我强烈建议使用它。

您可以访问location.search,这将从中提供给您?在URL末尾或片段标识符(#foo)的开头(以先到者为准)添加一个字符。

然后,您可以使用以下命令解析它:

函数parse_query_string(查询){var vars=查询.split(“&”);var query_string={};对于(var i=0;i<vars.length;i++){var pair=vars[i].split(“=”);var key=解码URIComponent(pair.shift());var value=decodeURIComponent(pair.join(“=”));//如果第一个条目具有此名称if(query_string[key]类型==“未定义”){query_string[key]=值;//如果第二个条目具有此名称}否则如果(query_string[key]类型==“string”){var arr=[query_string[key],value];query_string[key]=arr;//如果使用此名称的第三个或更高版本条目}其他{query_string[key].push(值);}}返回query_string;}var query_string=“a=1&b=3&c=m2-m3-m4-5”;var parsed_qs=parse_query_string(query_string);控制台日志(parsed_qs.c);

您可以通过以下方式从当前页面的URL获取查询字符串:

var query = window.location.search.substring(1);
var qs = parse_query_string(query);

这个问题的答案太多了,所以我再加一个。

/**
 * parses and returns URI query parameters 
 * 
 * @param {string} param parm
 * @param {bool?} asArray if true, returns an array instead of a scalar 
 * @returns {Object|Array} 
 */
function getURIParameter(param, asArray) {
    return document.location.search.substring(1).split('&').reduce(function(p,c) {
        var parts = c.split('=', 2).map(function(param) { return decodeURIComponent(param); });
        if(parts.length == 0 || parts[0] != param) return (p instanceof Array) && !asArray ? null : p;
        return asArray ? p.concat(parts.concat(true)[1]) : parts.concat(true)[1];
    }, []);
}

用法:

getURIParameter("id")  // returns the last id or null if not present
getURIParameter("id", true) // returns an array of all ids

这将处理空参数(那些没有“=value”的键)、标量和基于数组的值检索API的公开以及正确的URI组件解码。

使用URLSearchParams的超简单方法。

function getParam(param){
  return new URLSearchParams(window.location.search).get(param);
}

目前,Chrome、Firefox、Safari、Edge和其他浏览器都支持它。