如何在Javascript或jQuery中获取查询字符串参数?

时间:2015-05-16 03:16:20

标签: javascript jquery url

我有这样的链接:

http://localhost:8162/UI/Link2.aspx?txt_temp=123abc

我想获得值123abc。我跟着这个How can I get query string values in JavaScript?jquery get querystring from URL

$(document).ready(function () {
    function getUrlVars() {
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
        for (var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
        return vars;
    }
    function getParameterByName(name) {
        name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
        var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
        return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
    }
    onload = function () {
        alert(getParameterByName('txt_temp'));
        alert(getUrlVars()["txt_temp"]);
    }  
});

但它不起作用。

6 个答案:

答案 0 :(得分:6)

假设您有多个参数的URL,例如: -

"http://localhost:8162/UI/Link2.aspx?txt_temp=123abc&a=1&b=2"

然后在js中你可以这样做:

var url = "http://localhost:8162/UI/Link2.aspx?txt_temp=123abc&a=1&b=2"

var url = window.location.href

然后拆分主网址如:

hashes = url.split("?")[1]

//哈希保持此输出“txt_temp = 123abc&amp; a = 1&amp; b = 2”

然后,您可以再次按&amp; 分割以获取单个参数

修改

检查此示例:

function getUrlVars() {
var url = "http://localhost:8162/UI/Link2.aspx?txt_temp=123abc&a=1&b=2";
var vars = {};
var hashes = url.split("?")[1];
var hash = hashes.split('&');

for (var i = 0; i < hash.length; i++) {
params=hash[i].split("=");
vars[params[0]] = params[1];
}
return vars;
}

<强>输出

getUrlVars()
Object {txt_temp: "123abc", a: "1", b: "2"}

答案 1 :(得分:3)

它不起作用,因为您正在运行onload内部的函数,而document.ready内部的函数不会触发,因为到了document.ready内的代码时onload已执行,onload已被解雇。 只需从$(document).ready(function() { // Remove this, this is only for testing. history.pushState(null, null, '/UI/Link2.aspx?txt_temp=123abc'); function getUrlVars() { var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); for (var i = 0; i < hashes.length; i++) { hash = hashes[i].split('='); vars.push(hash[0]); vars[hash[0]] = hash[1]; } return vars; } function getParameterByName(name) { name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); } // You may also place this inside of a function, // and execute it when you desire, but `onload` is not going // to fire by itself, when inside of document.ready alert(getParameterByName('txt_temp')); alert(getUrlVars()["txt_temp"]); }); 事件中获取您的代码:

http://jsfiddle.net/whp9hnsk/1/

.thumb_images {
    float: left;
    margin-right: 5px;
    cursor: pointer;
}

.thumb_images img {
    border: 5px solid #ccc;
    -webkit-transition: border .15s ease-in-out;
    transition: border .15s ease-in-out;
}

.thumb_images img:hover {
    border-color: #f00;
}

答案 2 :(得分:2)

这应该让你开始:

function parseQueryStr( str, obj ) {


    // Return object
    obj = obj || {};


    // Looping through our key/values
    var keyvalues = str.split('&');
    for( var i=0; i<keyvalues.length; i++ ) {


        // Break apart our key/value
        var sides = keyvalues[i].split( '=' );


        // Valid propery name
        if( sides[0] != '' ) {


            // Decoding our components
            sides[0] = decodeURIComponent( sides[0] );
            sides[1] = decodeURIComponent( sides.splice( 1, sides.length-1 ).join( '=' ) );


            // If we have an array to deal with
            if( sides[0].substring( sides[0].length - 2 ) == '[]' ) {
                var arrayName = sides[0].substring( 0, sides[0].length - 2 );
                obj[ arrayName  ] = obj[ arrayName  ] || [];
                obj[ arrayName ].push( sides[1] );
            }


            // Single property (will overwrite)
            else {
                obj[ sides[0] ] = sides[1];
            }
        }
    }


    // Returning the query object
    return obj;
}

var href = window.location.href.split('#');
var query = href[0].split('?');
query.splice(0,1);
var get = parseQueryStr(query.join('?'));

alert( get.txt_temp );

答案 3 :(得分:1)

您可以使用:

    var param = new URLSearchParams(urlString).get('theParamName');

或者如果搜索当前页面:

    var param = new URLSearchParams(location.search).get('theParamName');

答案 4 :(得分:0)

您必须对“ =”之前和之后的所有内容进行切片,因此第一个答案有点不完整。这是适用于查询字符串的答案,其中也包含“ =” :) Like:

https://localhost:5071/login?returnUrl=/writer/user?id=315&name=john

感谢用户abhi

var getUrlVars = function () {
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
        for (var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            vars.push(hash[0]); //to get name before =
            vars[hash[0]] = hashes[i].slice(hashes[i].indexOf('=') + 1); //to take everything after first =
        }
        return vars;
    }

然后用

var url = window.getUrlVars()["returnUrl"];

所以它将提取带有“ =”的“ / writer / user?id = 315”:)

答案 5 :(得分:0)

我用 ES6 语法编写了这个 liner,它遵循已接受答案的方法。

data-integration/lib

使用:

假设当前网址是:https://stackoverflow.com?question=30271461

function getParam(key){
    return window.location.href.split('?')[1].split('&').filter(x=>x.split('=')[0]==key)[0].split('=')[1];
}