Kako lahko pridobim vrednosti poizvedbenega niza v javascriptu?

Ali obstaja način pridobivanja vrednosti poizvedbeni niz brez vtičnika prek jQueryja (ali brez njega)?

Če da, kako? Če ne, ali obstaja vtičnik, ki to omogoča?

Rešitev

Posodobitev: september 2018

Uporabite lahko URLSearchParams, ki je preprost in ima spodobno (vendar ne popolno) podporo za brskalnike.

const urlParams = new URLSearchParams(window.location.search);
const myParam = urlParams.get('myParam');

Original

Za ta namen ne potrebujete jQueryja. Uporabite lahko samo nekaj čistega JavaScripta:

function getParameterByName(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, '\\$&');
    var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, ' '));
}

Uporaba:

// query string: ?foo=lorem&bar=&baz
var foo = getParameterByName('foo'); // "lorem"
var bar = getParameterByName('bar'); // "" (present with empty value)
var baz = getParameterByName('baz'); // "" (present with no value)
var qux = getParameterByName('qux'); // null (absent)


Opomba: Če je parameter prisoten večkrat (?foo=lorem&foo=ipsum), boste dobili prvo vrednost (lorem). Za to ni nobenega standarda in uporaba je različna, glejte na primer to vprašanje: [Avtoritativni položaj podvojenih ključev poizvedbe HTTP GET] (https://stackoverflow.com/questions/1746507/authoritative-position-of-duplicate-http-get-query-keys).
OPOMBA: Funkcija je občutljiva na velike in male črke. Če želite, da ime parametra ni občutljivo na velikost črk, dodajte modifikator 'i' v RegExp.


To je posodobitev, ki temelji na novi URLSearchParams specs za bolj jedrnato doseganje istega rezultata. Glej odgovor z naslovom "URLSearchParams" spodaj.

Komentarji (52)

Roshambo na snipplr.com ima preprosto skripto za dosego tega, opisano v Get URL Parameters with jQuery | Improved. Z njegovo skripto lahko preprosto izvlečete samo želene parametre.

Tukaj je bistvo:

$.urlParam = function(name, url) {
    if (!url) {
     url = window.location.href;
    }
    var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(url);
    if (!results) { 
        return undefined;
    }
    return results[1] || undefined;
}

Nato samo pridobite parametre iz poizvedbenega niza.

Če je bil niz URL/povpraševanje xyz.com/index.html?lang=de.

Pokličite var langval = $.urlParam('lang'); in to je vse.

UZBEKJON ima o tem tudi odličen prispevek na blogu: Get URL parameters & values with jQuery.

Komentarji (3)

Če uporabljate program jQuery, lahko uporabite knjižnico, kot je jQuery BBQ: Knjižnica gumba za nazaj in poizvedb.

...jQuery BBQ zagotavlja popolno metodo .deparam(), skupaj z upravljanjem stanja hasha ter uporabniškimi metodami za razčlenjevanje in združevanje fragmentov / poizvedbenih nizov.

Ureditev: dodan primer Deparam:

 var DeparamExample = function() {
            var params = $.deparam.querystring();

            //nameofparam is the name of a param from url
            //code below will get param if ajax refresh with hash
            if (typeof params.nameofparam == 'undefined') {
                params = jQuery.deparam.fragment(window.location.href);
            }

            if (typeof params.nameofparam != 'undefined') {
                var paramValue = params.nameofparam.toString();

            }
        };

Če želite uporabiti le navaden JavaScript, lahko uporabite...

var getParamValue = (function() {
    var params;
    var resetParams = function() {
            var query = window.location.search;
            var regex = /[?&;](.+?)=([^&;]+)/g;
            var match;

            params = {};

            if (query) {
                while (match = regex.exec(query)) {
                    params[match[1]] = decodeURIComponent(match[2]);
                }
            }    
        };

    window.addEventListener
    && window.addEventListener('popstate', resetParams);

    resetParams();

    return function(param) {
        return params.hasOwnProperty(param) ? params[param] : null;
    }

})();​

Zaradi novega API HTML History in zlasti history.pushState() in history.replaceState() se lahko URL spremeni, kar bo razveljavilo predpomnilnik parametrov in njihovih vrednosti.

Ta različica bo ob vsaki spremembi zgodovine posodobila svoj notranji predpomnilnik parametrov.

Komentarji (0)