javascriptはURLのパラメータを取得して設定します.

3276 ワード

正誤版
function getQuery(key, url) {
    url = url || window.location.href;
    if (url.indexOf('#') !== -1)
        url = url.substring(0, url.indexOf('#'));
    var rts = [], rt;
    var queryReg = new RegExp('(^|\\?|&)' + key + '=([^&]*)(?=&|$|#)', 'g');
    while ((rt = queryReg.exec(url)) != null) {
        rts.push(decodeURIComponent(rt[2]));
    }
    if (rts.length == 0) return null;
    if (rts.length == 1) return rts[0];
    return rts;
}


function setQuery(key, value, url) {

    url = url || window.location.href;
    var hash = '';

    if (url.indexOf('#') !== -1)
        hash = url.substring(url.indexOf('#'));

    url = url.replace(hash, '');
    url = url.replace(new RegExp('(^|\\?|&)' + key + '=[^&]*(?=&|#|$)', 'g'), '');
    value = isArray(value) ? value : [value];

    for (var i = value.length - 1; i >= 0; i--) {
        value[i] = encodeURIComponent(value[i]);
    }

    var p = key + '=' + value.join('&' + key + '=');
    return url + (/\?/.test(url) ? '&' : '?') + p + hash;
}
 拡張版は、同じ名前のパラメータをサポートします.
function getQuery(key, url) {
    url = url || window.location.href;
    var rts = [], rt;
    var queryReg = new RegExp('(^|\\?|&)' + key + '=([^&]*)(?=&|$|#)', 'g');
    while ((rt = queryReg.exec(url)) != null) {
        rts.push(decodeURIComponent(rt[2]));
    }
    if (rts.length == 0) return null;
    if (rts.length == 1) return rts[0];
    return rts;
}


function setQuery(key, value, url) {

    url = url || window.location.href;
    url = url.replace(new RegExp('(^|\\?|&)' + key + '=[^&]*(?=&|$|#)', 'g'), '');
    value = value.splice ? value : [value];

    for (var i = value.length - 1; i >= 0; i--) {
        value[i] = encodeURIComponent(value[i]);
    }

    var p = key + '=' + value.join('&' + key + '=');
    return url + (/\?/.test(url) ? '&' : '?') + p;
}
 正規表現を使う
function getQuery(key, url) {
    var reg = new RegExp('^\\S*(\\?|&)' + key + '=([^&]*)\\S*$');
    var l = url || window.location.href;
    if (reg.test(l)) {
        return decodeURIComponent(l.replace(reg, '$2'));
    } else {
        return null;
    }
}

function setQuery(key, value, url) {
    var reg = new RegExp(key + '=[^&]*(?=&|$)');
    var l = url || window.location.href;
    if (reg.test(l)) {
        return l.replace(reg, key + '=' + encodeURIComponent(value));
    } else {
        return l + (/\?/.test(l) ? '&' : '?') + key + '=' + encodeURIComponent(value);
    }
}