很久以前写的一个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. Bootstrap插件系列——Bootstrap-table初始化、分页、客户端搜索、服务端搜索

    又好久不写博客,最近项目都是用的bootstrap的样式,不出意外,应该是要在bootstrap的道路上越走越远了,所以下定决心,把bootstrap的插件都好好学学. 昨天写了boostrap-ta ...

  2. js面向对象,多种创建对象方法!

    1.对象字面量. var clock={ hour:12, minute:10, second:10, showTime:function(){ alert(this.hour+":&quo ...

  3. 通过viewmodel找到view

    如何通过viewmodel找到view? 之前的做法是,在view加载时(Loaded),将view保存到viewmodel中,后来想想Caliburn-Micro,自带方法可以通过viewmodel ...

  4. modesim测试语句

    : 'd2; Reg2 <= Reg1; i <= i + 1'b1; join : 'd2; i <= i + 1'b1; join : 'd2; Reg2 <= Reg1; ...

  5. Python list列表的排序

    当我们从数据库中获取一写数据后,一般对于列表的排序是经常会遇到的问题,今天总结一下python对于列表list排序的常用方法: 第一种:内建函数sort() 这个应该是我们使用最多的也是最简单的排序函 ...

  6. EFM32外设模块—USART V1.00

    http://wenku.baidu.com/link?url=hx-pumUzdpS-AbD1OhEW11Jl6H8wex2DNsv4IcZwrgL-drwuUzZ6E1L64fCnAfdUOObK ...

  7. 新版本MySQL Server 5.7的免安装版本设置

    今天重新配置电脑,安装java开发运行的相关环境,在安装mysql的过程中,遇到了一些问题. 因为在网站上下载的是免安装版本的mysql 5.7 ,所以在安装过程中只需要解压缩zip的压缩包即可. 之 ...

  8. Java中抽象类和接口的区别

    转载自:http://dev.yesky.com/436/7581936.shtml 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种 ...

  9. Sql日期时间格式转换

    sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-0 ...

  10. 用servlet和jsp做探索数据库

    1.建一个web文件,在里面分三层,分别是实体层:DAO层,DAO层里面包含BaseDAO(数据访问层)和DAO层:还有一个servlet层,处理数据逻辑层! 一.实体层,建立两个实体,一个membe ...