如何通过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();