任何人都知道编写jQuery扩展来处理查询字符串参数的好方法吗?我基本上想扩展jQuery魔术($)
功能,因此可以执行以下操作:
$('?search').val();
这将使我在以下URL中获得值“ test” :http://www.example.com/index.php?search=test
。
我已经看到了很多可以在jQuery和Javascript中执行此操作的函数,但实际上我想扩展jQuery以使其完全如上所示工作。我不是在寻找jQuery插件,而是在寻找jQuery方法的扩展。
经过多年的丑陋字符串解析之后,有一种更好的方法:URLSearchParams让我们看看如何使用这个新的API从该位置获取值!
//假设“?post = 1234&action = edit”
var urlParams = new URLSearchParams(window.location.search);
console.log(urlParams.has('post')); // true
console.log(urlParams.get('action')); // "edit"
console.log(urlParams.getAll('action')); // ["edit"]
console.log(urlParams.toString()); // "?post=1234&action=edit"
console.log(urlParams.append('active', '1')); // "?
post=1234&action=edit&active=1"
更新:不支持IE
从下面的答案中使用此函数代替URLSearchParams
$.urlParam = function (name) {
var results = new RegExp('[\?&]' + name + '=([^&#]*)')
.exec(window.location.search);
return (results !== null) ? results[1] || 0 : false;
}
console.log($.urlParam('action')); //edit
为什么要扩展jQuery?与仅具有全局功能相比,扩展jQuery有什么好处?
function qs(key) {
key = key.replace(/[*+?^$.\[\]{}()|\\\/]/g, "\\$&"); // escape RegEx meta chars
var match = location.search.match(new RegExp("[?&]"+key+"=([^&]+)(&|$)"));
return match && decodeURIComponent(match[1].replace(/\+/g, " "));
}
http://jsfiddle.net/gilly3/sgxcL/
一种替代方法是解析整个查询字符串,并将值存储在对象中以供以后使用。这种方法不需要正则表达式并扩展了window.location
对象(但是,可以同样容易地使用全局变量):
location.queryString = {};
location.search.substr(1).split("&").forEach(function (pair) {
if (pair === "") return;
var parts = pair.split("=");
location.queryString[parts[0]] = parts[1] &&
decodeURIComponent(parts[1].replace(/\+/g, " "));
});
http://jsfiddle.net/gilly3/YnCeu/
此版本还利用Array.forEach()
,在IE7和IE8中是本机不可用的。可以使用MDN的实现来添加它,也可以使用jQuery的实现来添加它$.each()
。
jQuery jQuery-URL-Parser插件执行相同的工作,例如检索搜索查询字符串参数的值,则可以使用
$.url().param('search');
该库未积极维护。正如同一插件的作者建议,您可以使用URI.js。
或者,您可以改用js-url。它与下面的非常相似。
这样您就可以访问查询参数 $.url('?search')
在SitePoint从我们的朋友那里找到了这颗宝石。
https://www.sitepoint.com/url-parameters-jquery/。
使用纯jQuery。我只是用这个,它起作用了。例如,对它进行了一些调整。
//URL is http://www.example.com/mypage?ref=registration&email=bobo@example.com
$.urlParam = function (name) {
var results = new RegExp('[\?&]' + name + '=([^&#]*)')
.exec(window.location.search);
return (results !== null) ? results[1] || 0 : false;
}
console.log($.urlParam('ref')); //registration
console.log($.urlParam('email')); //bobo@example.com
随便使用。
这不是我的代码示例,但是我过去曾经使用过它。
//First Add this to extend jQuery
$.extend({
getUrlVars: function(){
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;
},
getUrlVar: function(name){
return $.getUrlVars()[name];
}
});
//Second call with this:
// Get object of URL parameters
var allVars = $.getUrlVars();
// Getting URL var by its name
var byName = $.getUrlVar('name');
我写了一个小函数,您只需要解析查询参数的名称。因此,如果您具有:?Project = 12&Mode = 200&date = 2013-05-27,并且想要“ Mode”参数,则只需将“ Mode”名称解析为函数:
function getParameterByName( name ){
var regexS = "[\\?&]"+name+"=([^&#]*)",
regex = new RegExp( regexS ),
results = regex.exec( window.location.search );
if( results == null ){
return "";
} else{
return decodeURIComponent(results[1].replace(/\+/g, " "));
}
}
// example caller:
var result = getParameterByName('Mode');
在上面@Rob Neild的答案的基础上,这是一个纯JS改编,它返回一个简单的已解码查询字符串参数的对象(无%20等)。
function parseQueryString () {
var parsedParameters = {},
uriParameters = location.search.substr(1).split('&');
for (var i = 0; i < uriParameters.length; i++) {
var parameter = uriParameters[i].split('=');
parsedParameters[parameter[0]] = decodeURIComponent(parameter[1]);
}
return parsedParameters;
}
用Vanilla Javascript写
//Get URL
var loc = window.location.href;
console.log(loc);
var index = loc.indexOf("?");
console.log(loc.substr(index+1));
var splitted = loc.substr(index+1).split('&');
console.log(splitted);
var paramObj = [];
for(var i=0;i<splitted.length;i++){
var params = splitted[i].split('=');
var key = params[0];
var value = params[1];
var obj = {
[key] : value
};
paramObj.push(obj);
}
console.log(paramObj);
//Loop through paramObj to get all the params in query string.
function parseQueryString(queryString) {
if (!queryString) {
return false;
}
let queries = queryString.split("&"), params = {}, temp;
for (let i = 0, l = queries.length; i < l; i++) {
temp = queries[i].split('=');
if (temp[1] !== '') {
params[temp[0]] = temp[1];
}
}
return params;
}
我用这个
文章标签:javascript , jquery , jquery-plugins , query-string , url
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!