如何通过JavaScript获取查询string?

如何从JavaScript中提取查询string?

谢谢!

你可以轻松地build立一个字典样式集合…

function getQueryStrings() { var assoc = {}; var decode = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); }; var queryString = location.search.substring(1); var keyValues = queryString.split('&'); for(var i in keyValues) { var key = keyValues[i].split('='); if (key.length > 1) { assoc[decode(key[0])] = decode(key[1]); } } return assoc; } 

像这样使用它…

 var qs = getQueryStrings(); var myParam = qs["myParam"]; 

如果您在地址栏中指的是url,那么

 window.location.search 

会给你只是查询string的一部分。 请注意,这包括开头的问号。

如果您指的是存储在(例如)string中的任何随机URL,则可以通过执行如下操作来获取查询string:从第一个问号的索引开始的子string。

 url.substring(url.indexOf("?")) 

这假定URL的片段部分中的任何问号都被正确编码了。 如果最后有一个目标(即,一个#后跟一个DOM元素的id),它也会包含这个目标。

这是我使用的方法…

 function Querystring() { var q = window.location.search.substr(1), qs = {}; if (q.length) { var keys = q.split("&"), k, kv, key, val, v; for (k = keys.length; k--; ) { kv = keys[k].split("="); key = kv[0]; val = decodeURIComponent(kv[1]); if (qs[key] === undefined) { qs[key] = val; } else { v = qs[key]; if (v.constructor != Array) { qs[key] = []; qs[key].push(v); } qs[key].push(val); } } } return qs; } 

它返回一个string和数组的对象,似乎工作得很好。 (单个键的string,具有多个值的同一个键的数组。

你需要简单的使用下面的function。

 function GetQueryStringByParameter(name) { name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); } 

– – 如何使用 – –

 var QueryString= GetQueryStringByParameter('QueryString'); 

非常简单!

 function parseQueryString(){ var assoc = {}; var keyValues = location.search.slice(1).split('&'); var decode = function(s){ return decodeURIComponent(s.replace(/\+/g, ' ')); }; for (var i = 0; i < keyValues.length; ++i) { var key = keyValues[i].split('='); if (1 < key.length) { assoc[decode(key[0])] = decode(key[1]); } } return assoc; } 

浏览器中有一个名为URLSearchParams的新API ,可以提取和更改查询string的值。

目前,它似乎在Firefox 44 +,Chrome 49 +和Opera 36 +支持。

初始化/input

要开始,请创build一个新的URLSearchParams对象。 对于目前的实现,你需要删除“?” 在查询string的开头,在查询string上使用slice(1) , 正如Jake Archibald所说 :

 var params = new URLSearchParams(window.location.search.slice(1)); // myParam=12 

在稍后的实现中,你应该可以不用切片来使用它:

 var params = new URLSearchParams(window.location.search); // myParam=12 

得到

你可以通过.get方法从它获得params:

 params.get('myParam'); // 12 

使用.set可以更改参数:

 params.set('myParam', 'newValue'); 

产量

如果当前查询string需要再次使用.toString方法提供它:

 params.toString(); // myParam=newValue 

这个API中有很多其他的方法 。

填充工具

由于浏览器支持仍然非常薄弱, Andrea Giammarchi(<3kB)有一个小型的polyfill 。

适用于我 –

 function querySt(Key) { var url = window.location.href; KeysValues = url.split(/[\?&]+/); for (i = 0; i < KeysValues.length; i++) { KeyValue= KeysValues[i].split("="); if (KeyValue[0] == Key) { return KeyValue[1]; } } } function GetQString(Key) { if (querySt(Key)) { var value = querySt(Key); return value; } } 

你可以使用这个Javascript

 function getParameterByName(name) { var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search); return match && decodeURIComponent(match[1].replace(/\+/g, ' ')); } 

要么

你也可以使用插件jQuery-URL-Parser允许检索URL的所有部分,包括锚点,主机等。

用法很简单,很酷:

 $.url().param("itemID") 

通过詹姆斯&阿尔法

我使用这种方法

 function getString() { var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); for(var i = 0; i < hashes.length; i++) { hash = hashes[i].split('='); vars.push(hash[0]); vars[hash[0]] = hash[1]; } return vars; } var buisnessArea = getString();