很久以前写的一个js关于url的帮助类,今天又翻出来了。贴一下源码,做一个简单的教程。
  

作用

  这是一个关于urlquery的一个帮助类,我们在前端编程的时候经常涉及到操作并重组url的情况,在参数比较多的时候操作就比较复杂了。这时候你需要一个帮助类来设置,读取,重组url.

源码

var UrlHelper = function (href) {
var url = href.toLowerCase();
var mark = url.indexOf("?");
if (mark < 0) {
this.host = url;
return this;
}
this.host = url.substring(0, mark);
var paramstr = url.substring(mark + 1);
var submark = paramstr.indexOf("?");
if (submark >= 0) {
var hold = paramstr.substring(submark + 1);
paramstr = paramstr.substring(0, submark);
}
var paramPairs = paramstr.split("&");
var len = paramPairs.length;
var temp;
for (var i = len - 1; i--; ) {
temp = paramPairs[i].split("=");
this.paramSet[temp[0]] = temp[1];
}
temp = paramPairs[len - 1].split("=");
if (submark >= 0) {
var k = {};
this.holdMark = temp[0];
k[temp[0]] = temp[1] + "?" + hold;
this.holdKeyPair = k;
} else this.paramSet[temp[0]] = temp[1];
};
UrlHelper.prototype = {
host: "",
paramSet: { },
holdKeyPair: null,
holdMark: "",
param: function(key) {
if (this.holdMark === key) return this.holdKeyPair[key];
return this.paramSet[key];
},
setParam: function(key, value) {
if (this.holdMark === key) this.holdKeyPair[key] = value;
else this.paramSet[key] = value;
return this;
},
getUrl: function() {
var index = 0;
var str = "";
var copy = this.paramSet;
for (var items in copy) {
str += (items + "=" + copy[items] + "&");
index++;
}
var temp = this.holdMark;
if (temp !== "") {
str += (temp + "=" + this.holdKeyPair[temp] + "&");
index++;
}
if (index) {
str = str.substring(0, str.length - 1);
return this.host + "?" + str;
}
return this.host;
},
removeParam: function(key) {
if (this.holdMark === key) {
this.holdMark = "";
this.holdKeyPair = null;
return this;
}
if (this.paramSet[key]) {
var k = { };
var temp = this.paramSet;
for (var items in temp) {
if (items !== key) k[items] = temp[items];
}
this.paramSet = k;
}
return this;
}
};

实例化

// href ==> http://www.cnblogs.com/licous/admin/EditPosts.aspx?opt=1
var myurlhelper=new UrlHelper(location.href);

  实例化需要一个初始地址,一般是location.href.之所以这样设计是因为可能出现不使用该地址的情况。

使用方法

//href==>http://www.cnblogs.com/licous/admin/EditPosts.aspx?opt=1
/*
*获取参数*/
var opt=myurlhelper.param("opt");
//opt==> 1
/*
*设置一个新参数*/
myurlhelper.setParam("opt1",2);
/*
*更改一个参数的值*/
myurlhelper.setParam("opt",3);
/*
*移除一个参数*/
myurlhelper.removeParam("opt");

注意:以上操作都不会实时改变url,所有的这些操作都保存在内存当中,通过以下方法可以获取最终的url

var targerurl=myurlhelper.getUrl();
//targerurl==>http://www.cnblogs.com/licous/admin/EditPosts.aspx?opt1=2

Javascript-URL帮助类的更多相关文章

  1. javascript常用工具类整理(copy)

    JavaScript常用工具类 类型 日期 数组 字符串 数字 网络请求 节点 存储 其他 1.类型 isString (o) { //是否字符串 return Object.prototype.to ...

  2. 玩转JavaScript OOP[2]——类的实现

    概述 当我们在谈论面向对象编程时,我们在谈论什么?我们首先谈论的是一些概念:对象.类.封装.继承.多态.对象和类是面向对象的基础,封装.继承和多态是面向对象编程的三大特性. JavaScript提供了 ...

  3. javascript URL实现简易书签

    简介 在HTML中,我们可以将js嵌入到script标签中,可以嵌入到行内代码中,也可以嵌入到src(href)中. 后者称作javascript URL.该方式的URL格式固定:javascript ...

  4. javascript基础知识-类和模块

    在JavaScript中可以定义对象的类,让每个对象都共享这些属性. 在JavaScript中,类的实现是基于其原型继承机制的.如果两个实例都从同一个原型对象上继承了属性,我们就说它们是同一个类的实例 ...

  5. JavaScript 数据验证类

    JavaScript 数据验证类 /* JavaScript:验证类 author:杨波 date:20160323 1.用户名验证 2.密码验证 3.重复密码验证 4.邮箱验证 5.手机号验证 6. ...

  6. javascript继承(一)—类的属性研究

    本篇文章主要针对javascript的属性进行分析,由于javascript是一种基于对象的语言,本身没有类的概念,所以对于javascript的类的定义有很多名字,例于原型对象,构造函数等,它们都是 ...

  7. JavaScript中创建类,赋值给ajax中的data参数

    缘由:因为要给根据是否选中checkbox来动态增加ajax中data的属性(ajax的data属性格式的几种方法,参考http://www.jb51.net/article/46676.htm) d ...

  8. Javascript学习6 - 类、对象、继承

    原文:Javascript学习6 - 类.对象.继承 Javasciprt并不像C++一样支持真正的类,也不是用class关键字来定义类.Javascript定义类也是使用function关键字来完成 ...

  9. JavaScript时间工具类

    /** * JavaScript日期工具类 * @author ZhangLp */ /** * 获取当前月的第一天 */ function getCurrentMonthFirst(){ var d ...

  10. JavaScript URL传值过程中遇到的问题及知识点总结

    JavaScript URL传值过程中遇到的问题及知识点总结 Web系统开发过程中经常用到URL进行传值,刚刚接触时不太会解析,会出现中文乱码问题等. 1.父子页面之间的传值(在一个页面中以加载ifr ...

随机推荐

  1. 老男孩python自动化运维作业1

    #!/usr/bin/env pthon #字典操作三级菜单 “b”返回上一级菜单,“q”退出. menu={"BJ":{"cp":{1:1,2:2,3:3}, ...

  2. android ListView点击item返回后listview滚动位置

    1.Don't work when dynamically loading content Parcelable state; @Override public void onPause() { // ...

  3. NSLock线程锁的使用测试

    测试1:NSLock线程锁是不是单例? 打印: 结论1:NSLock不是单例 测试2:同一个线程锁在不同的地方锁定,是否会有锁定两个? 打印为: 结论2:顺序打印,在不同的地方锁定也可以锁定. 测试3 ...

  4. 关于unity3D的学习感想

    在老师布置团队项目后组长确定项目是做游戏是,我才接触的Unity3D游戏引擎. 因为一开始我没有接触过这类软件,更没有用过.所以作为一个新手,做好的办 法实在网上找教程.网上说Unity3D是由Uni ...

  5. WinForm开发之取送货管理2

    写的有点慢,但都是一步步操作的,希望这些能成为以后宝贵的财富,话不多说,续上次取送货基本信息管理之产品分类管理,下面进行增删改的编写. 增加产品分类管理信息记录,双击[新增]按钮(其新增可让用户在Te ...

  6. ADV数字的剪切

    #include <iostream> using namespace std; #define SIZE 9 #define MAXLEN 6 int data[SIZE][MAXLEN ...

  7. hdoj 2034 人见人爱A-B

    Problem Description 参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法 ...

  8. C#基于Office组件操作Excel

    1.    内容简介 实现C#与Excel文件的交互操作,实现以下功能: a)     DataTable 导出到 Excel文件 b)     Model数据实体导出到 Excel文件[List&l ...

  9. [Linux] xargs

    xargs 命令可以将一个命令的输出,作为另一个命令的输入! 这里听来好像是管道的功能,之所以有xargs是因为有的命令不知吃管道,这时xargs就派上用场了! 具体的方法是:前一个命令的输出会使用空 ...

  10. [UCSD白板题] Pairwise Distinct Summands

    Problem Introduction This is an example of a problem where a subproblem of the corresponding greedy ...