用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 操作表格实现代码(多种操作打包)
Mar 20 Javascript
javascript 手动给表增加数据的小例子
Jul 10 Javascript
jQuery基于当前元素进行下一步的遍历
May 20 Javascript
Angular Js文件上传之form-data
Aug 28 Javascript
jQuery表单事件实例代码分享
Aug 18 Javascript
js判断一个字符串是以某个字符串开头的简单实例
Dec 27 Javascript
JavaScript数组push方法使用注意事项
Oct 30 Javascript
为输入框加入数字js校验代码分享
Nov 02 Javascript
使用vue-cli webpack 快速搭建项目的代码
Nov 21 Javascript
使用NestJS开发Node.js应用的方法
Dec 03 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
Jul 26 Javascript
vue 兄弟组件的信息传递的方法实例详解
Aug 30 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产生动态的影像图
2006/10/09 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
PHP+Redis开发的书签案例实战详解
2019/07/09 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
JavaScript提高性能知识点汇总
2016/01/15 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
微信小程序带动画弹窗组件使用方法详解
2018/11/27 Javascript
详解JavaScript中的Object.is()与"==="运算符总结
2020/06/17 Javascript
Python实现一个简单的MySQL类
2015/01/07 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
Python程序退出方式小结
2017/12/09 Python
django主动抛出403异常的方法详解
2019/01/04 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
浅谈react路由传参的几种方式
2021/03/23 Javascript
高三地理教学反思
2014/01/11 职场文书
小学生家长评语大全
2014/02/10 职场文书
小学节能减排倡议书
2014/05/15 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
追悼词范文大全
2015/06/23 职场文书
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python