获取url参数jquery或如何获取查询string值在js中

我看过很多jQuery示例,其中参数大小和名称是未知的。 我的url只会有1个string:

http://example.com?sent=yes 

我只想检测:

  1. sent是否存在?
  2. 这是否等于“是”?

最好的解决办法

 var getUrlParameter = function getUrlParameter(sParam) { var sPageURL = decodeURIComponent(window.location.search.substring(1)), sURLVariables = sPageURL.split('&'), sParameterName, i; for (i = 0; i < sURLVariables.length; i++) { sParameterName = sURLVariables[i].split('='); if (sParameterName[0] === sParam) { return sParameterName[1] === undefined ? true : sParameterName[1]; } } }; 

这就是你如何使用这个函数,假设URL是,
http://dummy.com/?technology=jquery&blog=jquerybyexample

 var tech = getUrlParameter('technology'); var blog = getUrlParameter('blog'); 

jQuery代码片段获取存储在url中的dynamicvariables作为参数,并将它们存储为JavaScriptvariables,随时可用于脚本:

 $.urlParam = function(name){ var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href); if (results==null){ return null; } else{ return decodeURI(results[1]) || 0; } } 

example.com?param1=name&param2=&id=6

 $.urlParam('param1'); // name $.urlParam('id'); // 6 $.urlParam('param2'); // null 

带空格的示例参数

 http://www.jquery4u.com?city=Gold Coast console.log($.urlParam('city')); //output: Gold%20Coast console.log(decodeURIComponent($.urlParam('city'))); //output: Gold Coast 

我始终坚持这一行。 现在params有变数:

 params={};location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){params[k]=v}) 

多行:

 var params={}; window.location.search .replace(/[?&]+([^=&]+)=([^&]*)/gi, function(str,key,value) { params[key] = value; } ); 

作为一个function

 function getSearchParams(k){ var p={}; location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v}) return k?p[k]:p; } 

您可以使用它作为:

 getSearchParams() //returns {key1:val1, key2:val2} 

要么

 getSearchParams("key1") //returns val1 

可能是为时已晚。 但是这个方法非常简单

 <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" }); 

UPDATE
需要url插件: plugins.jquery.com/url
感谢-Ripounet

2017年的解决scheme

我们有: http : //example.com?sent=yes

 let searchParams = new URLSearchParams(window.location.search) 

发送是否存在

 searchParams.has('sent') // true 

这是否等于 “是”?

 let param = searchParams.get('sent') 

然后只是比较它。

或者你可以使用这个整洁的小function,因为为什么过于复杂的解决scheme?

 function getQueryParam(param) { location.search.substr(1) .split("&") .some(function(item) { // returns first occurence and stops return item.split("=")[0] == param && (param = item.split("=")[1]) }) return param } 

看起来更好,简化和onelined:

tl; dr单线解决scheme

 var queryDict = {}; location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]}) 
结果:
 queryDict ['sent'] // undefined或'value'

但是如果你有编码字符或多值键呢?

你最好看到这个答案: 我怎样才能在JavaScript中查询string值?

潜行峰值

 "?a=1&b=2&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab" > queryDict a: ["1", "5", "text"] b: ["2"] c: ["3"] d: [undefined] e: [undefined, "http://w3schools.com/my test.asp?name=ståle&car=saab"] > queryDict["a"][1] // "5" > queryDict.a[1] // "5" 

又一个替代function…

 function param(name) { return (location.search.split(name + '=')[1] || '').split('&')[0]; } 

也许你可能想给牙医JS看看? (免责声明:我写了代码)

码:

 document.URL == "http://helloworld.com/quotes?id=1337&author=kelvin&message=hello" var currentURL = document.URL; var params = currentURL.extract(); console.log(params.id); // 1337 console.log(params.author) // "kelvin" console.log(params.message) // "hello" 

与Dentist JS,你可以基本上调用所有string(例如,document.URL.extract())的extract()函数,并返回所有find的参数的HashMap。 处理分隔符和全部也是可定制的。

缩小版<1kb

这个很简单,为我工作

 $.urlParam = function(name){ var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href); return results[1] || 0; } 

所以如果你的url是http://www.yoursite.com?city=4

尝试这个

 console.log($.urlParam('city')); 

有这个伟大的图书馆: https : //github.com/allmarkedup/purl

这可以让你简单地做

 url = 'http://example.com?sent=yes'; sent = $.url(url).param('sent'); if (typeof sent != 'undefined') { // sent exists if (sent == 'yes') { // sent is equal to yes // ... } } 

这个例子假设你正在使用jQuery。 你也可以像使用普通的javascript一样使用它,那么语法就会有所不同。

这可能是矫枉过正的,但现在有一个非常受欢迎的库可用于parsingURI,称为URI.js。

 var uri = "http://example.org/foo.html?technology=jquery&technology=css&blog=stackoverflow"; var components = URI.parse(uri); var query = URI.parseQuery(components['query']); document.getElementById("result").innerHTML = "URI = " + uri; document.getElementById("result").innerHTML += "<br>technology = " + query['technology']; // If you look in your console, you will see that this library generates a JS array for multi-valued queries! console.log(query['technology']); console.log(query['blog']); 
 <script src="ajax/libs/URI.js/1.17.0/URI.min.js"></script> <span id="result"></span> 
 function GetRequestParam(param) { var res = null; try{ var qs = decodeURIComponent(window.location.search.substring(1));//get everything after then '?' in URI var ar = qs.split('&'); $.each(ar, function(a, b){ var kv = b.split('='); if(param === kv[0]){ res = kv[1]; return false;//break loop } }); }catch(e){} return res; } 

这会给你一个很好的工作对象

  function queryParameters () { var result = {}; var params = window.location.search.split(/\?|\&/); params.forEach( function(it) { if (it) { var param = it.split("="); result[param[0]] = param[1]; } }); return result; } 

接着;

  if (queryParameters().sent === 'yes') { ..... 

我希望这会有所帮助。

  <script type="text/javascript"> function getParameters() { var searchString = window.location.search.substring(1), params = searchString.split("&"), hash = {}; if (searchString == "") return {}; for (var i = 0; i < params.length; i++) { var val = params[i].split("="); hash[unescape(val[0])] = unescape(val[1]); } return hash; } $(window).load(function() { var param = getParameters(); if (typeof param.sent !== "undefined") { // Do something. } }); </script> 

这是基于Gazoris的答案,但URL解码参数,以便它们可以在包含数字和字母以外的数据时使用:

 function urlParam(name){ var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href); // Need to decode the URL parameters, including putting in a fix for the plus sign // https://stackoverflow.com/a/24417399 return results ? decodeURIComponent(results[1].replace(/\+/g, '%20')) : null; } 

这么简单,你可以使用任何url和价值

 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: ?first=value1&second=&value2 var foo = getParameterByName('first'); // "value1" var bar = getParameterByName('second'); // "value2" 

注意:如果一个参数出现多次(?first = value1&second = value2),您将得到第一个值(value1),第二个值为(value2)。

还有另一个使用URI.js库的例子。

示例完全按照要求回答问题。

 var url = 'http://example.com?sent=yes'; var urlParams = new URI(url).search(true); // 1. Does sent exist? var sendExists = urlParams.sent !== undefined; // 2. Is it equal to "yes"? var sendIsEqualtToYes = urlParams.sent == 'yes'; // output results in readable form // not required for production if (sendExists) { console.log('Url has "sent" param, its value is "' + urlParams.sent + '"'); if (urlParams.sent == 'yes') { console.log('"Sent" param is equal to "yes"'); } else { console.log('"Sent" param is not equal to "yes"'); } } else { console.log('Url hasn\'t "sent" param'); } 
 <script src="ajax/libs/URI.js/1.18.2/URI.min.js"></script> 

Sameer答案的Coffeescript版本

 getUrlParameter = (sParam) -> sPageURL = window.location.search.substring(1) sURLVariables = sPageURL.split('&') i = 0 while i < sURLVariables.length sParameterName = sURLVariables[i].split('=') if sParameterName[0] == sParam return sParameterName[1] i++ 

对Sameer的回答略有改善,将paramscaching到闭包中,以避免在每次调用时parsing和遍历所有参数

 var getURLParam = (function() { var paramStr = decodeURIComponent(window.location.search).substring(1); var paramSegs = paramStr.split('&'); var params = []; for(var i = 0; i < paramSegs.length; i++) { var paramSeg = paramSegs[i].split('='); params[paramSeg[0]] = paramSeg[1]; } console.log(params); return function(key) { return params[key]; } })(); 

我用这个,它的工作原理。 http://codesheet.org/codesheet/NF246Tzs

 function getUrlVars() { var vars = {}; var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { vars[key] = value; }); return vars; } var first = getUrlVars()["id"]; 

使用vanilla JavaScript,你可以很容易的使用params(location.search),得到子string(没有?),并把它转换成一个数组,通过'&'分割。

当你迭代urlParams时,你可以用'='再次分割string,并将它作为对象[elmement [0]] = element [1]添加到'params'对象中。 超级简单,易于访问。

http://www.website.com/?error=userError&type=handwritten

  var urlParams = location.search.substring(1).split('&'), params = {}; urlParams.forEach(function(el){ var tmpArr = el.split('='); params[tmpArr[0]] = tmpArr[1]; }); var error = params['error']; var type = params['type']; 

如果在URL参数(如filename =“p&g.html”&uid = 66)中,该怎么办?

在这种情况下,第一个function将无法正常工作。 所以我修改了代码

 function getUrlParameter(sParam) { var sURLVariables = window.location.search.substring(1).split('&'), sParameterName, i; for (i = 0; i < sURLVariables.length; i++) { sParameterName = sURLVariables[i].split('='); if (sParameterName[0] === sParam) { return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]); } } } 

无可否认,我正在回答一个过度回答的问题,但是这样做的好处是:

– 不依赖于任何外部库,包括jQuery

– 不污染全局函数名称空间,通过扩展“String”

– 没有创build任何全局数据,find匹配后进行不必要的处理

– 处理编码问题,并接受(假定)非编码参数名称

– 避免明确for循环

 String.prototype.urlParamValue = function() { var desiredVal = null; var paramName = this.valueOf(); window.location.search.substring(1).split('&').some(function(currentValue, _, _) { var nameVal = currentValue.split('='); if ( decodeURIComponent(nameVal[0]) === paramName ) { desiredVal = decodeURIComponent(nameVal[1]); return true; } return false; }); return desiredVal; }; 

那么你会使用它:

 var paramVal = "paramName".urlParamValue() // null if no match 

试试这个工作演示 http://jsfiddle.net/xy7cX/

API:

  • inArray : http : inArray

这应该帮助:)

 var url = "http://myurl.com?sent=yes" var pieces = url.split("?"); alert(pieces[1] + " ===== " + $.inArray("sent=yes", pieces)); 
 $.urlParam = function(name) { var results = new RegExp('[\?&amp;]' + name + '=([^&amp;#]*)').exec(window.location.href); return results[1] || 0; } 

用这个

 $.urlParam = function(name) { var results = new RegExp('[\?&amp;]' + name + '=([^&amp;#]*)').exec(window.location.href); return results[1] || 0; } 

只是想显示我的代码:

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

}

 var RequestQuerystring; (window.onpopstate = function () { var match, pl = /\+/g, // Regex for replacing addition symbol with a space search = /([^&=]+)=?([^&]*)/g, decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); }, query = window.location.search.substring(1); RequestQuerystring = {}; while (match = search.exec(query)) RequestQuerystring[decode(match[1])] = decode(match[2]); })(); 
  var url_param = GetURLParameter('name'); function GetURLParameter(elem) { var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == elem) { return decodeURIComponent(sParameterName[1]); } } } 

从string获取参数:

 Object.defineProperty(String.prototype, 'urlParam', { value: function (param) { "use strict"; var str = this.trim(); var regex = "[\?&]" + param + "=([^&#]*)"; var results = new RegExp(regex, "i").exec(str); return (results !== null) ? results[1] : ''; } }); 

使用:

 var src = 'http://your-url.com/?param=value' console.log(src.urlParam(param)); // returns 'value'