用JavaScript 處理 URL 的兩個函數代碼
2024-09-06 12:41:48
供稿:網友
function request(paras){ //獲取 url 的參數值,不區分大小寫,如無此參數,返回空字符串.
var url = location.href;
var paraString = url.substring(url.indexOf("?")+1,url.length).split("&");
var paraObj = {}
for (i=0; j=paraString[i]; i++){
paraObj[j.substring(0,j.indexOf("=")).toLowerCase()] = j.substring(j.indexOf("=")+1,j.length);
}
var returnValue = paraObj[paras.toLowerCase()];
if(typeof(returnValue)=="undefined"){
return "";
}else{
return returnValue;
}
}
function redirect(){ //第一個參數是當前url,如 http://localhost/demo.asp?xxx=zzz, 第二個及以后的參數形式必須為 xxx=yyy, mm=bbbbb 最終跳轉url為 http://localhost/demo.asp?xxx=yyy&aaa=bbb
if (arguments.length==1){
location.href = arguments[0];
return;
}else{
var paraObj = {};
if (arguments[0].indexOf("?")!=-1){
var curUrlParas = 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);
}
var newURL= "";
for (key in paraObj){
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("http://www.xxx.com/list.asp?page=1","page="+parseInt(request("page"))+1),還可用于url類型的搜索,如:redirect("http://www.xxx.com/search.asp","range="+escape($("range").value),"keyword="+escape($("keyword").value)),url的操作變得簡單起來。
redirect 的核心是建立一個url參數表(hash table),函數的第二個及以后的參數都是添加到該hash table中,最后把該表序列化為目的url。
剛發完日志,就想到可以再改進一下,增加一個參數,決定是否用新窗口打開目的url。
/*
第一個參數是當前url,如 http://localhost/demo.asp?xxx=zzz,
第二個及以后的參數形式必須為 xxx=yyy, mm=bbbbb
最終跳轉url為 http://localhost/demo.asp?xxx=yyy&aaa=bbb
*/
function redirect(){
if (arguments.length==0){