用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 相关文章推荐
jquery自定义属性(类型/属性值)
May 21 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
May 04 Javascript
用AngularJS的指令实现tabs切换效果
Aug 31 Javascript
JS 对java返回的json格式的数据处理方法
Dec 05 Javascript
JavaScript中匿名函数的递归调用
Jan 22 Javascript
Vue 仿百度搜索功能实现代码
Feb 16 Javascript
JS实现基于拖拽改变物体大小的方法
Jan 23 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
Aug 28 Javascript
webpack4 SCSS提取和懒加载的示例
Sep 03 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
Oct 30 Javascript
一些手写JavaScript常用的函数汇总
Apr 16 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
May 19 jQuery
增强的 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+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
PHP安全性漫谈
2012/06/28 PHP
教你如何用php实现LOL数据远程获取
2014/06/10 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
PHP延迟静态绑定使用方法实例解析
2020/09/05 PHP
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
js+数组实现网页上显示时间/星期几的实用方法
2013/01/18 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
2015/09/04 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
JavaScript实战(原生range和自定义特效)简单实例
2016/08/21 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
js实现京东轮播图效果
2017/06/30 Javascript
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
详解React 的几种条件渲染以及选择
2018/10/23 Javascript
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
初学Python实用技巧两则
2014/08/29 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
PyTorch学习笔记之回归实战
2018/05/28 Python
python如何运行js语句
2020/09/09 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
安全教育心得体会
2013/12/29 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby