当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 用JavaScript 处理 URL 的两个函数代码

Javascript
javaScript 数值型和字符串型之间的转换
从父页面读取和操作iframe中内容方法
IE DOM实现存在的部分问题及解决方法
jqPlot Option配置对象详解
jquery JSON的解析方式
JavaScript 捕获窗口关闭事件
xml 封装与解析(javascript和C#中)
JavaScript 设计模式学习 Singleton
JavaScript 设计模式学习 Factory
javascript CSS画图之基础篇
JavaScript 获取事件对象的注意点
JavaScript Konami Code 实现代码
Google Map API更新实现用户自定义标注坐标
JavaScript this 深入理解
javascript EXCEL 操作类代码
window.parent调用父框架时 ie跟火狐不兼容问题
关于取不到由location.href提交而来的上级页面地址的解决办法
JS input 数字验证代码
网页全屏显示代码说明分析
JS 学习笔记 防止发生命名冲突

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 370 ::
收藏到网摘: n/a

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;
}
}