用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 相关文章推荐
Javacript实现颜色梯度变化和渐变的效果代码
May 31 Javascript
js整数字符串转换为金额类型数据(示例代码)
Dec 26 Javascript
JavaScript实现的浮动层框架用法实例分析
Oct 10 Javascript
jQuery实现下拉加载功能实例代码
Apr 01 Javascript
JavaScript实现自动跳转文本功能
May 25 Javascript
Angular4实现动态添加删除表单输入框功能
Aug 11 Javascript
JavaScript基础进阶之数组方法总结(推荐)
Sep 04 Javascript
jQuery实现碰到边缘反弹的动画效果
Feb 24 jQuery
百度小程序自定义通用toast组件
Jul 17 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
Sep 16 Javascript
京东优选小程序的实现代码示例
Feb 25 Javascript
微信小程序个人中心的列表控件实现代码
Apr 26 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
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
JS学习之一个简易的日历控件
2010/03/24 Javascript
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
React Native实现简单的登录功能(推荐)
2016/09/19 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
python word转pdf代码实例
2019/08/16 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
Python调用C语言程序方法解析
2020/07/07 Python
python3访问字典里的值实例方法
2020/11/18 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
如何判断计算机可能已经中马
2013/03/22 面试题
新娘父亲婚礼致辞
2014/01/16 职场文书
一份创业计划书范文
2014/02/08 职场文书
我的求职择业计划书
2014/04/04 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
小学教师读书笔记
2015/07/01 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
mysql死锁和分库分表问题详解
2021/04/16 MySQL
spring cloud 配置中心native配置方式
2021/09/25 Java/Android