JQuery查询、增加、修改Url参数

2017-09-28 · 🙈Lei · 0条 · 1072次

解析Url

下面的方法通过正则匹配的方式,解析出url的各个组成部分,以Object的方式返回。读取结果可以使用object.hash的方式,也可以使用object['hash']的方式。

例子:

下面是的代码是一个返回结果的示例,url是输入该方法的参数,其他值是解析出来的内容。

Object
    hash:"line"
    host:"www.geek-era.com"
    path:"query"
    port:undefined
    query:"aaa=111&bbb=22"
    scheme:"http"
    slash:"//"
    url:"http://www.geek-era.com/query?aaa=111&bbb=22#line"
/**
 * Url分析
 * @param {String} url 要分析的URL
 * @return {Object} 返回包含'url', 'scheme', 'slash', 'host', 'port', 'path', 'query', 'hash'的数组
 */
function analyseUrl(url){
    var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
    var analyseResult = parse_url.exec(url);
    var fields = ['url', 'scheme', 'slash', 'host', 'port', 'path', 'query', 'hash'];
    var result = new Object();
    $.each(fields, function(n, item){
        result[item] = analyseResult[n];
    });
    return result;
}

查询Url参数

下面的方法查询url中是否有某个参数,如果有则返回该参数的值,如果没有则返回null。

/**
 * 查询/判断url是否有某个参数,如果有该参数,返回参数的值;没有返回null 
 * @param {String} url 要查询的url
 * @param {String} name 要查询的参数名
 * @return {String} 参数的值
 */
function hasParameter(url, name){
    var urlAnalyse = analyseUrl(url);
    var urlParam = urlAnalyse.query;
    if(typeof(urlParam) != 'undefined'){
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
        var r = urlParam.match(reg);
        if (r != null){
            return unescape(r[2]);
        }
        //有该参数,但是值为null
        return "";
    }
    //没有该参数
    return null;
}

增加Url参数

/**
 * url增加参数
 * @param {String} url 要修改的url
 * @param {String} name 要增加的参数名
 * @param {String} value 对应的参数值
 * @return {String} 修改后的结果
 */
function addParameter(url, name, value){
    var newUrl = url;
    var paremeter = name + "=" + value;
    if (url.match("[\?]")) {
        //存在其他参数,用&连接
        newUrl = url + "&" + paremeter;
    } else {
        //没有参数,用?连接
        newUrl = url + "?" + paremeter;
    }
    return newUrl;
}

修改Url参数

/**
 * 替换Url参数
 * @param {String} url 要修改的Url
 * @param {String} name 要修改的参数名
 * @param {String} value 对应的参数的值
 * @return {String} 修改后的Url
 */
function replaceParameter(url, name, value) {
    var newUrl = url;
    if(hasParameter(url, name)){
        //有该参数,修改
        var replacedPar = eval('/(' + name + '=)([^&]*)/gi');
        newUrl = url.replace(replacedPar, name + '=' + value);
    } else {
        //没有该参数,增加
        newUrl = addParameter(url, name, value);
    }
    return newUrl;
}




  0