js获取url及起参数列表及扩展应用

本文介绍三种使用jQuery获取URL参数的方法,并详细解析了jquery.query.js提供的多种功能,如获取、设置、删除参数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在基于B/S的web开发中,我们时常会通过发请求给服务端,来完成所需要的功能。这时候,url就少不了,无参的,带参的,等等。所以在有的时候,我们就需要通过获取当前发送的url的参数,通过这些参数进而完成更多的功能,所以这篇文章我们就会谈到,在不借助其他工具的情况下,用我们的jquery来完成对当前请求的url的参数的获取。

在这里,我就列举出3类的获取参数的方法,其实质,当然,都是类似的。

第一种:1.引用外部js:<script type="text/javascript" src="js/jquery.query.js"></script>

2.设置js参数:<script type="text/javascript">

var jQuery.query={numbers:false,hash:true};

</script>

3.调用方法,获得参数:$.query.get(param1),$.query.get(param2),$.query.get(param3)......

第二种:1.引用外部js:<script type="text/javascript" src="js/jquery.query.js"></script>

2.编写脚本方法:<script type="text/javascript">

function GetQueryString(name)
{
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r!=null) return unescape(r[2]); return null;
}

</script>

3.调用方法,获得参数:GetQueryString("param1"),GetQueryString("param2"),GetQueryString("param3").....

第三种:1.引用外部js:<script type="text/javascript" src="js/jquery-1.4.2.js"></script>

2.编写脚本方法:<script type="text/javascript">

$.extend(

getUrlVars:function(){

var vars=[],hash;

var hashes=window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

for(vari = 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];

}

);

</script>

3.调用方法,获得参数:$.getUrlVars();$.getUrlVar('name');

由上述三种方式可以看出,我们会引用到jquery.query.js这个js文件,这个js里到底是提供了哪些方法呢,下面我们把它的代码贴出来:

Js代码
  1. /**
  2. *jQuery.query-QueryStringModificationandCreationforjQuery
  3. *WrittenbyBlairMitchelmore(blairDOTmitchelmoreATgmailDOTcom)
  4. *LicensedundertheWTFPL(http://sam.zoy.org/wtfpl/).
  5. *Date:2009/8/13
  6. *
  7. *@authorBlairMitchelmore
  8. *@version2.1.6
  9. *
  10. **/
  11. newfunction(settings){
  12. //VariousSettings
  13. var$separator=settings.separator||'&';
  14. var$spaces=settings.spaces===false?false:true;
  15. var$suffix=settings.suffix===false?'':'[]';
  16. var$prefix=settings.prefix===false?false:true;
  17. var$hash=$prefix?settings.hash===true?"#":"?":"";
  18. var$numbers=settings.numbers===false?false:true;
  19. jQuery.query=newfunction(){
  20. varis=function(o,t){
  21. returno!=undefined&&o!==null&&(!!t?o.constructor==t:true);
  22. };
  23. varparse=function(path){
  24. varm,rx=/\[([^[]*)\]/g,match=/^([^[]+?)(\[.*\])?$/.exec(path),base=match[1],tokens=[];
  25. while(m=rx.exec(match[2]))tokens.push(m[1]);
  26. return[base,tokens];
  27. };
  28. varset=function(target,tokens,value){
  29. varo,token=tokens.shift();
  30. if(typeoftarget!='object')target=null;
  31. if(token===""){
  32. if(!target)target=[];
  33. if(is(target,Array)){
  34. target.push(tokens.length==0?value:set(null,tokens.slice(0),value));
  35. }elseif(is(target,Object)){
  36. vari=0;
  37. while(target[i++]!=null);
  38. target[--i]=tokens.length==0?value:set(target[i],tokens.slice(0),value);
  39. }else{
  40. target=[];
  41. target.push(tokens.length==0?value:set(null,tokens.slice(0),value));
  42. }
  43. }elseif(token&&token.match(/^\s*[0-9]+\s*$/)){
  44. varindex=parseInt(token,10);
  45. if(!target)target=[];
  46. target[index]=tokens.length==0?value:set(target[index],tokens.slice(0),value);
  47. }elseif(token){
  48. varindex=token.replace(/^\s*|\s*$/g,"");
  49. if(!target)target={};
  50. if(is(target,Array)){
  51. vartemp={};
  52. for(vari=0;i<target.length;++i){
  53. temp[i]=target[i];
  54. }
  55. target=temp;
  56. }
  57. target[index]=tokens.length==0?value:set(target[index],tokens.slice(0),value);
  58. }else{
  59. returnvalue;
  60. }
  61. returntarget;
  62. };
  63. varqueryObject=function(a){
  64. varself=this;
  65. self.keys={};
  66. if(a.queryObject){
  67. jQuery.each(a.get(),function(key,val){
  68. self.SET(key,val);
  69. });
  70. }else{
  71. jQuery.each(arguments,function(){
  72. varq=""+this;
  73. q=q.replace(/^[?#]/,'');//removeanyleading?||#
  74. q=q.replace(/[;&]$/,'');//removeanytrailing&||;
  75. if($spaces)q=q.replace(/[+]/g,'');//replace+'swithspaces
  76. jQuery.each(q.split(/[&;]/),function(){
  77. varkey=decodeURIComponent(this.split('=')[0]||"");
  78. varval=decodeURIComponent(this.split('=')[1]||"");
  79. if(!key)return;
  80. if($numbers){
  81. if(/^[+-]?[0-9]+\.[0-9]*$/.test(val))//simplefloatregex
  82. val=parseFloat(val);
  83. elseif(/^[+-]?[0-9]+$/.test(val))//simpleintregex
  84. val=parseInt(val,10);
  85. }
  86. val=(!val&&val!==0)?true:val;
  87. if(val!==false&&val!==true&&typeofval!='number')
  88. val=val;
  89. self.SET(key,val);
  90. });
  91. });
  92. }
  93. returnself;
  94. };
  95. queryObject.prototype={
  96. queryObject:true,
  97. has:function(key,type){
  98. varvalue=this.get(key);
  99. returnis(value,type);
  100. },
  101. GET:function(key){
  102. if(!is(key))returnthis.keys;
  103. varparsed=parse(key),base=parsed[0],tokens=parsed[1];
  104. vartarget=this.keys[base];
  105. while(target!=null&&tokens.length!=0){
  106. target=target[tokens.shift()];
  107. }
  108. returntypeoftarget=='number'?target:target||"";
  109. },
  110. get:function(key){
  111. vartarget=this.GET(key);
  112. if(is(target,Object))
  113. returnjQuery.extend(true,{},target);
  114. elseif(is(target,Array))
  115. returntarget.slice(0);
  116. returntarget;
  117. },
  118. SET:function(key,val){
  119. varvalue=!is(val)?null:val;
  120. varparsed=parse(key),base=parsed[0],tokens=parsed[1];
  121. vartarget=this.keys[base];
  122. this.keys[base]=set(target,tokens.slice(0),value);
  123. returnthis;
  124. },
  125. set:function(key,val){
  126. returnthis.copy().SET(key,val);
  127. },
  128. REMOVE:function(key){
  129. returnthis.SET(key,null).COMPACT();
  130. },
  131. remove:function(key){
  132. returnthis.copy().REMOVE(key);
  133. },
  134. EMPTY:function(){
  135. varself=this;
  136. jQuery.each(self.keys,function(key,value){
  137. deleteself.keys[key];
  138. });
  139. returnself;
  140. },
  141. load:function(url){
  142. varhash=url.replace(/^.*?[#](.+?)(?:\?.+)?$/,"$1");
  143. varsearch=url.replace(/^.*?[?](.+?)(?:#.+)?$/,"$1");
  144. returnnewqueryObject(url.length==search.length?'':search,url.length==hash.length?'':hash);
  145. },
  146. empty:function(){
  147. returnthis.copy().EMPTY();
  148. },
  149. copy:function(){
  150. returnnewqueryObject(this);
  151. },
  152. COMPACT:function(){
  153. functionbuild(orig){
  154. varobj=typeoforig=="object"?is(orig,Array)?[]:{}:orig;
  155. if(typeoforig=='object'){
  156. functionadd(o,key,value){
  157. if(is(o,Array))
  158. o.push(value);
  159. else
  160. o[key]=value;
  161. }
  162. jQuery.each(orig,function(key,value){
  163. if(!is(value))returntrue;
  164. add(obj,key,build(value));
  165. });
  166. }
  167. returnobj;
  168. }
  169. this.keys=build(this.keys);
  170. returnthis;
  171. },
  172. compact:function(){
  173. returnthis.copy().COMPACT();
  174. },
  175. toString:function(){
  176. vari=0,queryString=[],chunks=[],self=this;
  177. varencode=function(str){
  178. str=str+"";
  179. if($spaces)str=str.replace(//g,"+");
  180. returnencodeURIComponent(str);
  181. };
  182. varaddFields=function(arr,key,value){
  183. if(!is(value)||value===false)return;
  184. varo=[encode(key)];
  185. if(value!==true){
  186. o.push("=");
  187. o.push(encode(value));
  188. }
  189. arr.push(o.join(""));
  190. };
  191. varbuild=function(obj,base){
  192. varnewKey=function(key){
  193. return!base||base==""?[key].join(""):[base,"[",key,"]"].join("");
  194. };
  195. jQuery.each(obj,function(key,value){
  196. if(typeofvalue=='object')
  197. build(value,newKey(key));
  198. else
  199. addFields(chunks,newKey(key),value);
  200. });
  201. };
  202. build(this.keys);
  203. if(chunks.length>0)queryString.push($hash);
  204. queryString.push(chunks.join($separator));
  205. returnqueryString.join("");
  206. }
  207. };
  208. returnnewqueryObject(location.search,location.hash);
  209. };
  210. }(jQuery.query||{});//PassinjQuery.queryassettingsobject

由源码我们可以看出,之前调用的它的东西,在源码中都有定义,如get()方法,load()方法,toString()方法等等。它里面提供了众多的扩展方法,这个就有待大家一起去研究使用。例如:

1. 想获取test,则在引入该js后,使用如下方式获取:var value=$.query.get('key');

2. 参数列表的名称相同,则可以这样,var arrValues=$.query.get("key"); arr=[value1,value2,value3....]

3. 参数列表的名称相同,想获取第二个参数,var value2=$.query.get("key[1]")

4. 设置参数,var newKey=$.query.set("name","zhangsan").toString(); newKey : "?name=zhangsan"

5. 设置两个参数,var newKeys=$.query.set("name","zhangsan").set("age",23).toString(); newKeys : "?name=zhangsan && age=23"

6. 删除一个参数:var deleteKey=$.query.REMOVE("sex");

7. 清空所有的参数:var emptyKey=$.query.empty();

8. 复制所有参数:var copyKeys=$.query.copy();

等等以上很多,更多的源自于对源码的研究和利用,这些就靠大家自己去琢磨了,实在没有你想要的,自己再这个基础上再添加自己的想要的代码也是可以的,该js的附件我也传上点击打开链接。希望这篇文章对大家有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值