为什么要扩展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()
。