js 获取地址信息返回URL对象


function URLUtil(sURL)
{
    this.hostname = (sURL.indexOf("://")==-1?
        (/^([^/:\?#]*)(?::|\/|$|\?|#)/.test(sURL)?RegExp["$1"]:""):
        (/:\/\/([^/:\?#]*)(?::|\/|$|\?|#)/.test(sURL)?RegExp["$1"]:"")).decode();
    this.hash = (/(#.*)/.test(sURL)?RegExp["$1"]:"").decode();
    this.protocol = (/^(.*?:)\/\//.test(sURL)?RegExp["$1"]:"").decode();
    this.port = (/[^:]*?:(\d{1,5})(\/|$)/.test(sURL)?RegExp["$1"]:"").decode();
    this.pathname = (sURL.indexOf("://")==-1?
        (/(\/[^#\?]*)/.test(sURL)?RegExp["$1"]:""):
        (/:\/\/.*?(\/[^\?#]*)/.test(sURL)?RegExp["$1"]:"")).decode();
    this._paramMap = this._parseParam(/\?(.*?)($|#)/.test(sURL)?RegExp["$1"]:"");
}

URLUtil.prototype._parseParam=function(sParams)
{
    var paramMap={};
    if(sParams.length>0) {
        var paramArray = sParams.split("&");
        for(var i=0;i<paramArray.length;++i) {
            var paramPair=paramArray[i].split("=");
            paramPair[0]=paramPair[0].decode();
            paramPair[1]=paramPair[1]?paramPair[1].decode():"";
            if(!paramMap[paramPair[0]]) {
                paramMap[paramPair[0]] = new Array(paramPair[1]);
            }
            else {
                paramMap[paramPair[0]].push(paramPair[1]);
            }
        }
    }
    return paramMap;
}

URLUtil.prototype.toString=function()
{
    var url="";
    if (this.protocol.length!=0) {
        url += this.protocol;
        url += "//";
    }
    url += this.hostname;
    if (this.port.length!=0){
        url += ":"
        url += this.port;
    }
    url += this.pathname;
   
    var pairArray=[];
    for (var i in this._paramMap) {
        for (var j=0;j<this._paramMap[i].length;++j){
            pairArray.push(i.encode()+"="+this._paramMap[i][j].encode());
        }
    }
    if(pairArray.length>0) {
        url += "?";
        url += pairArray.join("&");
    }

    url += this.hash;
    return url;
}

URLUtil.prototype.getParam=function(sName,sDefaultValue)
{
    return this._paramMap[sName]?this._paramMap[sName][0]:sDefaultValue||null;
}

URLUtil.prototype.getMultiParam=function(sName,sDefaultValue)
{
    return this._paramMap[sName]?this._paramMap[sName]:sDefaultValue||null;
}

URLUtil.prototype.setParam=function(sName, sValue)
{
    this.removeParam(sName).addParam(sName,sValue);
    return this;   
}

URLUtil.prototype.addParam=function(sName)
{
    if(!this._paramMap[sName]) {
        this._paramMap[sName] = [];
    }
    for(var i=1;i<arguments.length;++i) {
        this._paramMap[sName].unshift(arguments[i].toString());
    }
    return this;
}

URLUtil.prototype.removeParam=function(sName)
{
    delete this._paramMap[sName];
    return this;   
}

URLUtil.prototype.removeAllParams=function()
{
    this._paramMap = {};
    return this;   
}

//TEST

转载于:https://my.oschina.net/brian_nodejs/blog/186841

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值