您的位置:首页 > Web前端 > JQuery

jQuery获取url参数插件

2010-07-08 16:23 609 查看
把下面代码。放到js文件中

/**
*jQuery.query-QueryStringModificationandCreationforjQuery
*WrittenbyBlairMitchelmore(blairDOTmitchelmoreATgmailDOTcom)
*LicensedundertheWTFPL(http://sam.zoy.org/wtfpl/).
*Date:2009/8/13
*
*@authorBlairMitchelmore
*@version2.1.6
*
**/
newfunction(settings){
//VariousSettings
var$separator=settings.separator||'&';
var$spaces=settings.spaces===false?false:true;
var$suffix=settings.suffix===false?'':'[]';
var$prefix=settings.prefix===false?false:true;
var$hash=$prefix?settings.hash===true?"#":"?":"";
var$numbers=settings.numbers===false?false:true;

jQuery.query=newfunction(){
varis=function(o,t){
returno!=undefined&&o!==null&&(!!t?o.constructor==t:true);
};
varparse=function(path){
varm,rx=//[([^[]*)/]/g,match=/^([^[]+?)(/[.*/])?$/.exec(path),base=match[1],tokens=[];
while(m=rx.exec(match[2]))tokens.push(m[1]);
return[base,tokens];
};
varset=function(target,tokens,value){
varo,token=tokens.shift();
if(typeoftarget!='object')target=null;
if(token===""){
if(!target)target=[];
if(is(target,Array)){
target.push(tokens.length==0?value:set(null,tokens.slice(0),value));
}elseif(is(target,Object)){
vari=0;
while(target[i++]!=null);
target[--i]=tokens.length==0?value:set(target[i],tokens.slice(0),value);
}else{
target=[];
target.push(tokens.length==0?value:set(null,tokens.slice(0),value));
}
}elseif(token&&token.match(/^/s*[0-9]+/s*$/)){
varindex=parseInt(token,10);
if(!target)target=[];
target[index]=tokens.length==0?value:set(target[index],tokens.slice(0),value);
}elseif(token){
varindex=token.replace(/^/s*|/s*$/g,"");
if(!target)target={};
if(is(target,Array)){
vartemp={};
for(vari=0;i<target.length;++i){
temp[i]=target[i];
}
target=temp;
}
target[index]=tokens.length==0?value:set(target[index],tokens.slice(0),value);
}else{
returnvalue;
}
returntarget;
};

varqueryObject=function(a){
varself=this;
self.keys={};

if(a.queryObject){
jQuery.each(a.get(),function(key,val){
self.SET(key,val);
});
}else{
jQuery.each(arguments,function(){
varq=""+this;
q=q.replace(/^[?#]/,'');//removeanyleading?||#
q=q.replace(/[;&]$/,'');//removeanytrailing&||;
if($spaces)q=q.replace(/[+]/g,'');//replace+'swithspaces

jQuery.each(q.split(/[&;]/),function(){
varkey=decodeURIComponent(this.split('=')[0]||"");
varval=decodeURIComponent(this.split('=')[1]||"");

if(!key)return;

if($numbers){
if(/^[+-]?[0-9]+/.[0-9]*$/.test(val))//simplefloatregex
val=parseFloat(val);
elseif(/^[+-]?[0-9]+$/.test(val))//simpleintregex
val=parseInt(val,10);
}

val=(!val&&val!==0)?true:val;

if(val!==false&&val!==true&&typeofval!='number')
val=val;

self.SET(key,val);
});
});
}
returnself;
};

queryObject.prototype={
queryObject:true,
has:function(key,type){
varvalue=this.get(key);
returnis(value,type);
},
GET:function(key){
if(!is(key))returnthis.keys;
varparsed=parse(key),base=parsed[0],tokens=parsed[1];
vartarget=this.keys[base];
while(target!=null&&tokens.length!=0){
target=target[tokens.shift()];
}
returntypeoftarget=='number'?target:target||"";
},
get:function(key){
vartarget=this.GET(key);
if(is(target,Object))
returnjQuery.extend(true,{},target);
elseif(is(target,Array))
returntarget.slice(0);
returntarget;
},
SET:function(key,val){
varvalue=!is(val)?null:val;
varparsed=parse(key),base=parsed[0],tokens=parsed[1];
vartarget=this.keys[base];
this.keys[base]=set(target,tokens.slice(0),value);
returnthis;
},
set:function(key,val){
returnthis.copy().SET(key,val);
},
REMOVE:function(key){
returnthis.SET(key,null).COMPACT();
},
remove:function(key){
returnthis.copy().REMOVE(key);
},
EMPTY:function(){
varself=this;
jQuery.each(self.keys,function(key,value){
deleteself.keys[key];
});
returnself;
},
load:function(url){
varhash=url.replace(/^.*?[#](.+?)(?:/?.+)?$/,"$1");
varsearch=url.replace(/^.*?[?](.+?)(?:#.+)?$/,"$1");
returnnewqueryObject(url.length==search.length?'':search,url.length==hash.length?'':hash);
},
empty:function(){
returnthis.copy().EMPTY();
},
copy:function(){
returnnewqueryObject(this);
},
COMPACT:function(){
functionbuild(orig){
varobj=typeoforig=="object"?is(orig,Array)?[]:{}:orig;
if(typeoforig=='object'){
functionadd(o,key,value){
if(is(o,Array))
o.push(value);
else
o[key]=value;
}
jQuery.each(orig,function(key,value){
if(!is(value))returntrue;
add(obj,key,build(value));
});
}
returnobj;
}
this.keys=build(this.keys);
returnthis;
},
compact:function(){
returnthis.copy().COMPACT();
},
toString:function(){
vari=0,queryString=[],chunks=[],self=this;
varencode=function(str){
str=str+"";
if($spaces)str=str.replace(//g,"+");
returnencodeURIComponent(str);
};
varaddFields=function(arr,key,value){
if(!is(value)||value===false)return;
varo=[encode(key)];
if(value!==true){
o.push("=");
o.push(encode(value));
}
arr.push(o.join(""));
};
varbuild=function(obj,base){
varnewKey=function(key){
return!base||base==""?[key].join(""):[base,"[",key,"]"].join("");
};
jQuery.each(obj,function(key,value){
if(typeofvalue=='object')
build(value,newKey(key));
else
addFields(chunks,newKey(key),value);
});
};

build(this.keys);

if(chunks.length>0)queryString.push($hash);
queryString.push(chunks.join($separator));

returnqueryString.join("");
}
};

returnnewqueryObject(location.search,location.hash);
};
}(jQuery.query||{});//PassinjQuery.queryassettingsobject


如果想获取test,则可以引入插件后,
用如下方法获取:
vartest=$.query.get('test');

如果参数有多个相同的名称,则可以这样:
vararr=$.query.get('testy');
输出:[值1,值2,值3...]

如果要获取多个相同名称中的某一个,可以这样:
vararrayElement=$.query.get('testy[1]');

此插件不仅能获取参数,也能设置参数。

设置一个参数:
varnewUrl=$.query.set("section",5).toString();
输出:"?section=5"

设置两个参数:
varnewUrl=$.query.set("section",5).set("action","do").toString();
输出:"?action=do§ion=5"

删除一个参数:
varoldQueryAgain=$.query.REMOVE("type");

清空所有参数:
varemptyQuery=$.query.empty();

复制所有参数:
varstillTheSame=$.query.copy();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: