用JavaScript 处理 URL 的两个函数代码

2018-09-27 09:18

阅读:817

  functionrequest(paras){//获取url的参数值,不区分大小写,如无此参数,返回空字符串.
varurl=location.href;
varparaObj={}
for(i=0;j=paraString[i];i++){
paraObj[j.substring(0,j.indexOf(=)).toLowerCase()]=j.substring(j.indexOf(=)+1,j.length);
}
varreturnValue=paraObj[paras.toLowerCase()];

if(typeof(returnValue)==undefined){
return;
}else{
returnreturnValue;
}
}
functionredirect(){//第一个参数是当前url,如第二个及以后的参数形式必须为xxx=yyy,mm=bbbbb最终跳转url为
if(arguments.length==1){
location.href=arguments[0];
return;
}else{
varparaObj={};
if(arguments[0].indexOf(?)!=-1){
varcurUrlParas=arguments[0].substring(arguments[0].indexOf(?)+1,arguments[0].length).split(&);
for(i=0;j=curUrlParas[i];i++){
paraObj[j.substring(0,j.indexOf(=)).toLowerCase()]=j.substring(j.indexOf(=)+1,j.length);
}
}
for(i=1;j=arguments[i];i++){
paraObj[j.substring(0,j.indexOf(=)).toLowerCase()]=j.substring(j.indexOf(=)+1,j.length);
}
varnewURL=;
for(keyinparaObj){
newURL+=key+=+paraObj[key]+&;
}
if(arguments[0].indexOf(?)!=-1){
newURL=arguments[0].substring(0,arguments[0].indexOf(?)+1)+newURL.substring(0,newURL.length-1);
}else{
newURL=arguments[0]+?+newURL.substring(0,newURL.length-1);
}
location.href=newURL;
return;
}
}


第二个函数redirect如果只有一个参数时,就是简单的重定向,当有2个或以上的参数时,就能动态指定目的url,该函数可用于翻页功能,比如redirect(,还可用于url类型的搜索,如:redirect(,url的操作变得简单起来。
redirect的核心是建立一个url参数表(hashtable),函数的第二个及以后的参数都是添加到该hashtable中,最后把该表序列化为目的url。

刚发完日志,就想到可以再改进一下,增加一个参数,决定是否用新窗口打开目的url。


/*
第一个参数是当前url,如
第二个及以后的参数形式必须为xxx=yyy,mm=bbbbb
最终跳转url为
*/
functionredirect(){
if(arguments.length==0){
return;
}
if(arguments.length==1){
location.href=arguments[0];
return;
}elseif(arguments.length==2){
(arguments[1]==true)?window.open(arguments[0]):location.href=arguments[0];
return;
}else{
varparaObj={};
if(arguments[0].indexOf(?)!=-1){
varcurUrlParas=arguments[0].substring(arguments[0].indexOf(?)+1,arguments[0].length).split(&);
for(i=0;j=curUrlParas[i];i++){
paraObj[j.substring(0,j.indexOf(=)).toLowerCase()]=j.substring(j.indexOf(=)+1,j.length);
}
}
for(i=2;j=arguments[i];i++){
paraObj[j.substring(0,j.indexOf(=)).toLowerCase()]=j.substring(j.indexOf(=)+1,j.length);
}
varnewURL=;
for(keyinparaObj){
newURL+=key+=+paraObj[key]+&;
}
if(arguments[0].indexOf(?)!=-1){
newURL=arguments[0].substring(0,arguments[0].indexOf(?)+1)+newURL.substring(0,newURL.length-1);
}else{
newURL=arguments[0]+?+newURL.substring(0,newURL.length-1);
}
arguments[1]==true?window.open(newURL):location.href=newURL;
return;
}
}



根据昨天临下班前的想法,再修改一下,把第二个参数放到最后面去。

/*
UseAge:
redirect(url,[paras_1],[paras_2],...,[paras_n],[newWin])
paras_n:url参数,形式如page=1或type=news等。
newWin:函数的最后一个参数,布尔类型,为true时,用新窗口(window.open)打开url,否则用当前窗口(location.open)打开。默认值为false。

Example:
redirect(将在google搜索hello,并翻到第3页,并用新窗口打开。
redirect(翻页功能中的“下一页”。

*/
functionredirect(){
if(arguments.length==0){
return;
}
if(arguments.length==1){
location.href=arguments[0];
return;
}elseif(arguments.length==2&&typeof(arguments[1])==boolean){
(arguments[1]==true)?window.open(arguments[0]):location.href=arguments[0];
return;
}else{
varparaObj={};
if(arguments[0].indexOf(?)!=-1){
varcurUrlParas=arguments[0].substring(arguments[0].indexOf(?)+1,arguments[0].length).split(&);
for(i=0;j=curUrlParas[i];i++){
paraObj[j.substring(0,j.indexOf(=)).toLowerCase()]=j.substring(j.indexOf(=)+1,j.length);
}
}
varj=arguments.length;
for(i=1;iif(typeof(arguments[i])==boolean){
break;
}
paraObj[arguments[i].substring(0,arguments[i].indexOf(=)).toLowerCase()]=arguments[i].substring(arguments[i].indexOf(=)+1,arguments[i].length);
}
varnewURL=;
for(keyinparaObj){
newURL+=key+=+paraObj[key]+&;
}
if(arguments[0].indexOf(?)!=-1){
newURL=arguments[0].substring(0,arguments[0].indexOf(?)+1)+newURL.substring(0,newURL.length-1);
}else{
newURL=arguments[0]+?+newURL.substring(0,newURL.length-1);
}
if(typeof(arguments[length-1])==boolean&&arguments[length-1]==true){
window.open(newURL);
}else{
location.href=newURL;
}
return;
}
}


评论


亲,登录后才可以留言!