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

  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){

  return;

  }

  if (arguments.length==1){

  location.href = arguments[0];

  return;

  }else if(arguments.length==2){

  (arguments[1]==true)?window.open(arguments[0]):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=2; 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);

  }

  arguments[1]==true?window.open(newURL):location.href = newURL;

  return;

  }

  }

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

  /*

  Use Age:

  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("http://www.google.com/search","q=hello","start=20",true); //将在google搜索"hello",并翻到第3页,并用新窗口打开。

  redirect("http://www.xxx.com/listpage.asp","page="+parseInt(request("page"))+1); //翻页功能中的“下一页”。

  */

  function redirect(){

  if (arguments.length==0){

  return;

  }

  if (arguments.length==1){

  location.href = arguments[0];

  return;

  }else if(arguments.length==2 && typeof(arguments[1])=="boolean"){

  (arguments[1]==true)?window.open(arguments[0]):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);

  }

  }

  var j = arguments.length;

  for (i=1; i if (typeof(arguments[i])=="boolean"){

  break;

  }

  paraObj[arguments[i].substring(0,arguments[i].indexOf("=")).toLowerCase()] = arguments[i].substring(arguments[i].indexOf("=")+1,arguments[i].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);

  }

  if(typeof(arguments[length-1])=="boolean" && arguments[length-1]==true){

  window.open(newURL);

  }else{

  location.href = newURL;

  }

  return;

  }

  }