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


Posted in Javascript onAugust 13, 2007

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

Javascript 相关文章推荐
javascript 处理事件绑定的一些兼容写法
Dec 24 Javascript
javascript下4个跨浏览器必备的函数
Mar 07 Javascript
js 中{},[]中括号,大括号使用详解
May 12 Javascript
script标签属性type与language使用选择
Dec 02 Javascript
jquery解析xml字符串示例分享
Mar 25 Javascript
js给网页加上背景音乐及选择音效的方法
Mar 03 Javascript
JavaScript中getUTCSeconds()方法的使用详解
Jun 11 Javascript
javascript 利用arguments实现可变长参数
Nov 21 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
Feb 09 Javascript
图文详解Javascript中的上下文和作用域
Feb 15 Javascript
JS解析后台返回的JSON格式数据实例
Aug 06 Javascript
基于vue实现图片验证码倒计时60s功能
Dec 10 Javascript
增强的 JavaScript 的 trim 函数的代码
Aug 13 #Javascript
让回调函数 showResponse 也带上参数的代码
Aug 13 #Javascript
分析 JavaScript 中令人困惑的变量赋值
Aug 13 #Javascript
IE/FireFox具备兼容性的拖动代码
Aug 13 #Javascript
JavaScript 编程引入命名空间的方法与代码
Aug 13 #Javascript
权威JavaScript 中的内存泄露模式
Aug 13 #Javascript
封装好的省市地区联动控件附下载
Aug 13 #Javascript
You might like
ThinkPHP模板IF标签用法详解
2014/07/01 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
jQuery 使用手册(四)
2009/09/23 Javascript
jQuery 获取对象 定位子对象
2010/05/31 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
python中Apriori算法实现讲解
2017/12/10 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
pytorch打印网络结构的实例
2019/08/19 Python
WxPython实现无边框界面
2019/11/18 Python
python操作gitlab API过程解析
2019/12/27 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
CSS3 边框效果
2019/11/04 HTML / CSS
家居设计专业个人自荐信范文
2013/11/26 职场文书
国际政治个人自荐信范文
2013/11/26 职场文书
应用心理学个人的求职信
2013/12/08 职场文书
建筑人员岗位职责
2013/12/25 职场文书
成功的酒店创业计划书
2013/12/27 职场文书
工程承包协议书范本
2014/09/29 职场文书
2015新年寄语大全
2014/12/08 职场文书
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android