Javascript-URL帮助类

  很久以前写的一个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

 

posted @ 2013-06-17 17:08  第十章  阅读(1500)  评论(3编辑  收藏  举报