更新:2018年9月
您可以使用简单且具有不错(但不完整)浏览器支持的URLSearchParams。
const urlParams = new URLSearchParams(window.location.search); const myParam = urlParams.get('myParam');
原版的
为此,您不需要jQuery。您可以只使用一些纯JavaScript:
function getParameterByName(name, url) { if (!url) url = window.location.href; name = name.replace(/[\[\]]/g, '\\$&'); var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, ' ')); }
用法:
// query string: ?foo=lorem&bar=&baz var foo = getParameterByName('foo'); // "lorem" var bar = getParameterByName('bar'); // "" (present with empty value) var baz = getParameterByName('baz'); // "" (present with no value) var qux = getParameterByName('qux'); // null (absent)
注意:如果一个参数多次出现(?foo=lorem&foo=ipsum
),您将获得第一个值(lorem
)。对此没有标准,用法也有所不同,例如参见以下问题:重复的HTTP GET查询键的权威位置。
注意:该功能区分大小写。如果您希望使用不区分大小写的参数名称,请在RegExp中添加'i'修饰符
这是基于新的URLSearchParams规范的更新,目的是更简洁地达到相同的结果。请参阅下面标题为“ URLSearchParams ”的答案。
没有人说过纯Javascript无法做到这一点。如果您已经在使用jQuery,并且jQuery具有执行此操作的功能,则使用jQuery而不是使用新功能重新发明轮子是有意义的。
此函数如何处理
http://www.mysite.com/index.php?x=x1&x=x2&x=x3
字段的值x
不明确。这也不能处理多值键,这也是完全合法的。
为什么要为此使用正则表达式?
对于的querystring
?mykey=0&m.+key=1
,调用getParameterByName("m.+key")
将返回0
而不是1
。name
在构建正则表达式之前,您需要转义正则表达式元字符。您只需要.replace()
使用全局标志并将其"\\$&"
用作替换表达式即可调用一次。您应该搜索location.search
而不是location.href
。答案超过400的应解释这些细节。