我需要解析查询字符串www.mysite.com/default.aspx?dest=aboutus.aspx。 如何在JavaScript中获得dest变量?


当前回答

我想要一个简单的函数,它接受URL作为输入,并返回查询参数的映射。 如果我要改进这个函数,我将支持URL中数组数据的标准,和或嵌套变量。

这应该可以用于jQuery。参数(qparams)函数。

function getQueryParams(url){
    var qparams = {},
        parts = (url||'').split('?'),
        qparts, qpart,
        i=0;

    if(parts.length <= 1 ){
        return qparams;
    }else{
        qparts = parts[1].split('&');
        for(i in qparts){

            qpart = qparts[i].split('=');
            qparams[decodeURIComponent(qpart[0])] = 
                           decodeURIComponent(qpart[1] || '');
        }
    }

    return qparams;
};

其他回答

我想要一个简单的函数,它接受URL作为输入,并返回查询参数的映射。 如果我要改进这个函数,我将支持URL中数组数据的标准,和或嵌套变量。

这应该可以用于jQuery。参数(qparams)函数。

function getQueryParams(url){
    var qparams = {},
        parts = (url||'').split('?'),
        qparts, qpart,
        i=0;

    if(parts.length <= 1 ){
        return qparams;
    }else{
        qparts = parts[1].split('&');
        for(i in qparts){

            qpart = qparts[i].split('=');
            qparams[decodeURIComponent(qpart[0])] = 
                           decodeURIComponent(qpart[1] || '');
        }
    }

    return qparams;
};

下面是一个快速简单的JavaScript查询字符串解析方法:

function getQueryVariable(variable) {
    var query = window.location.search.substring(1);
    var vars = query.split('&');
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split('=');
        if (decodeURIComponent(pair[0]) == variable) {
            return decodeURIComponent(pair[1]);
        }
    }
    console.log('Query variable %s not found', variable);
}

现在向page.html发起请求?x =你好:

console.log(getQueryVariable('x'));
function parseQuery(queryString) {
    var query = {};
    var pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');
    for (var i = 0; i < pairs.length; i++) {
        var pair = pairs[i].split('=');
        query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '');
    }
    return query;
}

将查询字符串hello=1&another=2转换为对象{hello: 1, another: 2}。从那里,很容易提取所需的变量。

也就是说,它不处理数组的情况,如“hello=1&hello=2&hello=3”。要使用这种方法,必须在添加之前检查所创建对象的属性是否存在,并将其值转换为数组,将任何额外的位压入。

这个怎么样?

function getQueryVar(varName){
    // Grab and unescape the query string - appending an '&' keeps the RegExp simple
    // for the sake of this example.
    var queryStr = unescape(window.location.search) + '&';

    // Dynamic replacement RegExp
    var regex = new RegExp('.*?[&\\?]' + varName + '=(.*?)&.*');

    // Apply RegExp to the query string
    var val = queryStr.replace(regex, "$1");

    // If the string is the same, we didn't find a match - return false
    return val == queryStr ? false : val;
}

..然后用:

alert('Var "dest" = ' + getQueryVar('dest'));

干杯

如果你知道你将只有一个查询字符串变量,你可以简单地做:

var dest = location.search.replace(/^.*?\=/, '');