Cum pot obține valori șir de interogare în JavaScript?

Există un plugin-mai puțin un fel de preluarea șir de interogare valorile prin jQuery (sau fara)?

Dacă da, cum? Dacă nu, există un plugin care poate face acest lucru?

Comentarii la întrebare (8)
Soluția

Actualizare: Sep-2018

Puteți utiliza URLSearchParams, care este simplu și are decente (dar nu complet) suport pentru browser-ul.

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

*Original ***

Nu't nevoie de jQuery pentru acest scop. Puteți folosi doar o pură JavaScript:

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, ' '));
}

Utilizare:

// 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)


Notă: Dacă un parametru este prezent de mai multe ori (?foo=lorem&foo=ipsum), vei primi prima valoare (lorem`). Nu există nici un standard despre acest lucru și uzanțele varia, vezi, de exemplu, această întrebare: poziție de Autoritate de duplicat HTTP GET interogare keys. NOTĂ: funcția este case-sensitive. Dacă preferați caz-insensibil nume parametru, adaugă 'i' modificator la RegExp


Aceasta este o actualizare bazat pe noua URLSearchParams specificatiile pentru a obține același rezultat mai succint. A se vedea răspunsul intitulat "URLSearchParams" de mai jos.

Comentarii (52)

Unele dintre soluțiile postate aici sunt ineficiente. Repetarea expresiei regulate de căutare de fiecare dată când script-ul are nevoie pentru a accesa un parametru este complet inutil, o singură funcție pentru a despărțit parametrii într-o asociativ-matrice stil obiect este suficient. Daca're nu lucrează cu HTML 5 Istorie API, acest lucru este necesar doar o dată la fiecare încărcare a paginii. Alte sugestii aici, de asemenea, nu pentru a decoda corect URL-ul.

var urlParams;
(fereastră.onpopstate = function () {
var meci,
pl = /\+/g, // Regex pentru înlocuirea plus simbol cu un spațiu
căutare = /([^&=]+)=?([^&]*)/g,
decodare = function (e) { return decodeURIComponent(s.replace(pl, " ")); },
query = window.location.search.substring(1);
urlParams = {};
while (match = search.<a href="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/exec">exec</a>(query))
   urlParams[decode(match[1])] = decode(match[2]);

})();

Exemplu de interogare:

?i=principal&modul=fata&sid=de8d49b78a85a322c4155015fdce22c4&enc=+Alo%20&gol

Rezultatul:

 urlParams = {
    enc: " Hello ",
    i: "main",
    mode: "front",
    sid: "de8d49b78a85a322c4155015fdce22c4",
    empty: ""
}

alert(urlParams["mode"]);
// -> "front"

alert("empty" in urlParams);
// -> true

Acest lucru ar putea fi ușor îmbunătățită să se ocupe de matrice stil șiruri de interogare prea. Un exemplu în acest sens este aici, dar din array-parametrii de stil sunt't este definit în RFC 3986 - am castigat't polua acest răspuns cu codul sursă. Pentru cei interesați într-o "poluat" versiune, uita-te la campbeln's de răspuns de mai jos.

De asemenea, după cum a subliniat în comentariile, ; este un legale delimitator pentru cheie=valoareperechi. Ar fi nevoie de o mult mai complicat regex să se ocupe de;sau&, care cred că este inutil, deoarece&#39;s rare care;este folosit și aș spune chiar mai puțin probabil ca ambele ar fi folosit. Dacă aveți nevoie pentru a sprijini; "în loc de" &`, doar le schimba în regex.

Daca're folosind un server-side de preprocesare limbă, poate doriți să utilizați nativ JSON funcții pentru a face munca grea pentru tine. De exemplu, în PHP se pot scrie:
<script>var urlParams = <?php echo json_encode($_GET, JSON_HEX_TAG);?>;</script>

Mult mai simplu!

Comentarii (25)

ES2015 (ES6)

getQueryStringParams = query => {
    return query
        ? (/^[?#]/.test(query) ? query.slice(1) : query)
            .split('&')
            .reduce((params, param) => {
                    let [key, value] = param.split('=');
                    params[key] = value ? decodeURIComponent(value.replace(/\+/g, ' ')) : '';
                    return params;
                }, {}
            )
        : {}
};

Fără jQuery

var qs = (function(a) {
    if (a == "") return {};
    var b = {};
    for (var i = 0; i < a.length; ++i)
    {
        var p=a[i].split('=', 2);
        if (p.length == 1)
            b[p[0]] = "";
        else
            b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
    }
    return b;
})(window.location.search.substr(1).split('&'));

Cu un URL de genul ?subiect=123&nume=interogare+string, următoarele vor reveni:

qs["topic"];    // 123
qs["name"];     // query string
qs["nothere"];  // undefined (object)

Google metodă

Ruperea Google's cod am gasit metoda pe care o folosesc: getUrlParameters

function (b) {
    var c = typeof b === "undefined";
    if (a !== h && c) return a;
    for (var d = {}, b = b || k[B][vb], e = b[p]("?"), f = b[p]("#"), b = (f === -1 ? b[Ya](e + 1) : [b[Ya](e + 1, f - e - 1), "&", b[Ya](f + 1)][K](""))[z]("&"), e = i.dd ? ia : unescape, f = 0, g = b[w]; f < g; ++f) {
        var l = b[f][p]("=");
        if (l !== -1) {
            var q = b[f][I](0, l),
                l = b[f][I](l + 1),
                l = l[Ca](/\+/g, " ");
            try {
                d[q] = e(l)
            } catch (A) {}
        }
    }
    c && (a = d);
    return d
}

Acesta este disimulat, dar este de înțeles. Ea nu funcționează pentru unele variabile sunt nedefinite.

Ei încep să se uite pentru parametrii pe url-ul din ? și, de asemenea, de la hash #. Apoi, pentru fiecare parametru-au despărțit în semnul egal b[f][p]("=") (care se pare ca indexOf, se folosesc de poziția char pentru a obține cheie/valoare). Având split, ei verifică dacă parametrul are o valoare sau nu, dacă are, apoi le stoca valoarea lui "d", în caz contrar ei doar continua.

În cele din urmă obiect " d "este returnat, de manipulare a scăpa și semnul"+". Acest obiect este la fel ca a mea, are același comportament.


Metoda mea ca un plugin jQuery

(function($) {
    $.QueryString = (function(paramsArray) {
        let params = {};

        for (let i = 0; i < paramsArray.length; ++i)
        {
            let param = paramsArray[i]
                .split('=', 2);

            if (param.length !== 2)
                continue;

            params[param[0]] = decodeURIComponent(param[1].replace(/\+/g, " "));
        }

        return params;
    })(window.location.search.substr(1).split('&'))
})(jQuery);

Utilizare

//Get a param
$.QueryString.param
//-or-
$.QueryString["param"]
//This outputs something like...
//"val"

//Get all params as object
$.QueryString
//This outputs something like...
//Object { param: "val", param2: "val" }

//Set a param (only in the $.QueryString object, doesn't affect the browser's querystring)
$.QueryString.param = "newvalue"
//This doesn't output anything, it just updates the $.QueryString object

//Convert object into string suitable for url a querystring (Requires jQuery)
$.param($.QueryString)
//This outputs something like...
//"param=newvalue&param2=val"

//Update the url/querystring in the browser's location bar with the $.QueryString object
history.replaceState({}, '', "?" + $.param($.QueryString));
//-or-
history.pushState({}, '', "?" + $.param($.QueryString));

De testare de performanță (split metodă împotriva regex metoda) (jsPerf)

Pregătirea cod: metode declarație

Split cod de încercare

var qs = window.GetQueryString(query);

var search = qs["q"];
var value = qs["value"];
var undef = qs["undefinedstring"];

Regex cod de încercare

var search = window.getParameterByName("q");
var value = window.getParameterByName("value");
var undef = window.getParameterByName("undefinedstring");

Testarea în Firefox 4.0 x86 pe Windows Server 2008 R2 / 7 x64

  • Metoda Split: 144,780 ±2.17% cel mai rapid
  • Regex metoda: 13,891 ±0.85% | 90% mai lent
Comentarii (25)

Versiune îmbunătățită a Artem Barger's a răspunde:

function getParameterByName(name) {
    var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
    return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

Pentru mai multe informații privind îmbunătățirea vedea: http://james.padolsey.com/javascript/bujs-1-getparameterbyname/

Comentarii (6)

URLSearchParams

Firefox 44+, Mozilla 36+, Edge 17+, Safari 10.3+ și Chrome 49+ suport URLSearchParams API:

Există o google-a sugerat URLSearchParams polyfill pentru versiunile stabile ale IE.

Nu este standardizat prin W3C, dar este un standard de viață de WhatWG.

Puteți să-l folosească pe "locație":

let params = new URLSearchParams(location.search);

sau

let params = (new URL(location)).searchParams;

Sau, desigur, pe orice URL-ul:

let url = new URL('https://example.com?foo=1&bar=2');
let params = new URLSearchParams(url.search);

Puteți obține params, de asemenea, folosind o prescurtare .searchParams proprietate pe URL-ul de obiect, astfel:

let params = new URL('https://example.com?foo=1&bar=2').searchParams;
params.get('foo'); // "1"
params.get('bar'); // "2" 

Ai citit/set de parametri prin get(KEY)", " set(CHEIE, VALOARE), append(CHEIE, VALOARE) API. De asemenea, puteți repeta peste toate valorile pentru (să p a params) {}`.

O referință pentru punerea în aplicare și pagină de probă sunt disponibile pentru audit și testarea.

Comentarii (5)

Doar o altă recomandare. Plugin-ul Ochi vă permite pentru a prelua toate părțile de URL-ul, inclusiv ancora, gazdă, etc.

Acesta poate fi utilizat cu sau fără jQuery.

Utilizare este foarte simplu și rece:

var url = $.url('http://allmarkedup.com/folder/dir/index.html?item=value'); // jQuery version
var url = purl('http://allmarkedup.com/folder/dir/index.html?item=value'); // plain JS version
url.attr('protocol'); // returns 'http'
url.attr('path'); // returns '/folder/dir/index.html'

Cu toate acestea, începând din data de 11 Nov, 2014, Ochi nu mai este menținută și autorul recomandă utilizarea URI.js în loc. Plugin-ul jQuery este diferită în faptul că se axează pe elemente - pentru utilizare cu siruri de caractere, utilizați doar URI direct, cu sau fără jQuery. Cod Similar ar arata ca atare, fuller docs aici:

var url = new URI('http://allmarkedup.com/folder/dir/index.html?item=value'); // plain JS version
url.protocol(); // returns 'http'
url.path(); // returns '/folder/dir/index.html'
Comentarii (1)

tl;dr

Un mod rapid, soluție completă, care se ocupă de multivoci chei și de caractere codificate.

var qd = {};
if (location.search) location.search.substr(1).split("&").forEach(function(item) {var s = item.split("="), k = s[0], v = s[1] && decodeURIComponent(s[1]); (qd[k] = qd[k] || []).push(v)})

//using ES6   (23 characters cooler)
var qd = {};
if (location.search) location.search.substr(1).split`&`.forEach(item => {let [k,v] = item.split`=`; v = v && decodeURIComponent(v); (qd[k] = qd[k] || []).push(v)})

Multi-căptușite:

var qd = {};
if (location.search) location.search.substr(1).split("&").forEach(function(item) {
    var s = item.split("="),
        k = s[0],
        v = s[1] && decodeURIComponent(s[1]); //  null-coalescing / short-circuit
    //(k in qd) ? qd[k].push(v) : qd[k] = [v]
    (qd[k] = qd[k] || []).push(v) // null-coalescing / short-circuit
})

Ce este tot acest cod... "nul-coalescență", scurt-circuit evaluare ES6 Destructurare misiuni, Săgeata funcții, Șablon siruri de caractere

Exemplu:

"?a=1&b=0&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab"
> qd
a: ["1", "5", "t e x t"]
b: ["0"]
c: ["3"]
d: [undefined]
e: [undefined, "http://w3schools.com/my test.asp?name=ståle&car=saab"]

> qd.a[1]    // "5"
> qd["a"][1] // "5"



Citește mai departe... despre Vanilie JavaScript soluție.

To acces la diferitele părți ale unui URL folosesc locație.(căutare|hash)`

Simplu (inactiv) soluție

var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
  • se Ocupă de gol chei corect.
  • Înlocuiește mai multe chei cu ultima valoarea găsit.
"?a=1&b=0&c=3&d&e&a=5"
> queryDict
a: "5"
b: "0"
c: "3"
d: undefined
e: undefined

Multi-evaluate chei

Cheie simplă verificare (articol din dict) ? dict.element.push(val) : dict.element = [val]

var qd = {};
location.search.substr(1).split("&").forEach(function(item) {(item.split("=")[0] in qd) ? qd[item.split("=")[0]].push(item.split("=")[1]) : qd[item.split("=")[0]] = [item.split("=")[1]]})
  • Acum se întoarce tablouri în loc.
  • Acces valorile de qd.tasta[index] sau qd[cheie][index]
> qd
a: ["1", "5"]
b: ["0"]
c: ["3"]
d: [undefined]
e: [undefined]

Caractere codate?

Folosesc decodeURIComponent()` pentru cel de-al doilea sau ambele desparte.

var qd = {};
location.search.substr(1).split("&").forEach(function(item) {var k = item.split("=")[0], v = decodeURIComponent(item.split("=")[1]); (k in qd) ? qd[k].push(v) : qd[k] = [v]})

Exemplu:

"?a=1&b=0&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab"
> qd
a: ["1", "5", "t e x t"]
b: ["0"]
c: ["3"]
d: ["undefined"]  // decodeURIComponent(undefined) returns "undefined" !!!*
e: ["undefined", "http://w3schools.com/my test.asp?name=ståle&car=saab"]



# De la comentarii **\*!!!** Vă rugăm să rețineți, că `decodeURIComponent(nedefinit)` returnează șirul de caractere `"nedefinit"`. Soluția constă într-o simplă utilizare a [`&&`][5], care asigură că `decodeURIComponent()` nu este numit pe valori nedefinite. _(A se vedea "soluție completă" în partea de sus.)_
v = v && decodeURIComponent(v);


Dacă querystring este gol (locul de amplasare.căutare == ""), rezultatul este oarecum înșelătoare qd == {"": nedefinit}. Este sugerat pentru a verifica querystring înainte de lansarea funcție de parsare likeso:

if (location.search) location.search.substr(1).split("&").forEach(...)
Comentarii (16)

Roshambo pe snipplr.com are un script simplu pentru a realiza acest lucru este descris în URL Parametri cu jQuery | Îmbunătățite. Cu script-ul, de asemenea, obține cu ușurință pentru a scoate doar parametrii doriți.

Aici's esențialul:

$.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;
}

Atunci ia-ti parametri din șirul de interogare.

Deci, dacă URL-ul/șir de interogare a fost xyz.com/index.html?lang=de.

Suna var langval = $.urlParam('lang');, și'am luat-o.

UZBEKJON are o mare post pe blog la fel de bine, Ia parametrii URL & valori cu jQuery.

Comentarii (3)

Daca're folosind jQuery, puteți utiliza o bibliotecă, precum jQuery GRĂTAR: Butonul Back & Bibliotecă Interogare.

...jQuery GRĂTAR oferă un plin `.deparam () metodă, împreună cu ambele hash management de stat, și fragment / șir de interogare a analiza și de a îmbina metode de utilitate.

Edit: Adăugarea Deparam Exemplu:

 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();

            }
        };

Dacă doriți să utilizați doar simple JavaScript, ai putea folosi...

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;
    }

})();​

Din cauza noii HTML Istorie API și în special istoria.pushState () " și " istorie.replaceState()`, URL-ul se poate schimba, care va invalida cache de parametri și valorile lor.

Această versiune va actualiza cache interne de parametri de fiecare dată când istoria se schimbă.

Comentarii (0)

Doar folosi două fisuri:

function get(n) {
    var half = location.search.split(n + '=')[1];
    return half !== undefined ? decodeURIComponent(half.split('&')[0]) : null;
}

Am citit toate cele anterioare și răspunsuri cât mai complete. Dar cred că este cea mai simplă și mai rapidă metodă. Puteți verifica în acest jsPerf referință

Pentru a rezolva problema în Rup's comentariu, adauga conditionat split de a schimba prima linie la cele două de mai jos. Dar precizia absolută înseamnă it's acum mai lent decât regexp (a se vedea jsPerf).

function get(n) {
    var half = location.search.split('&' + n + '=')[1];
    if (!half) half = location.search.split('?' + n + '=')[1];
    return half !== undefined ? decodeURIComponent(half.split('&')[0]) : null;
}

Deci, dacă știi că ai câștigat't alerga într-Rup's contra-caz, acesta câștigă. În caz contrar, regexp.

Sau dacă aveți controlul querystring și pot garanta că o valoare sunteți încercarea de a obține niciodată nu va conține nici un URL codificat caractere (având acestea în valoare ar fi o idee rea) - puteți utiliza următoarele ceva mai simplificat și ușor de citit versiunea optiunea 1:

funcția getQueryStringValueByName(nume) { var queryStringFromStartOfValue = locație.de căutare.split(numele + '=')1; return queryStringFromStartOfValue !== nedefinit ? queryStringFromStartOfValue.split('&')[0] : null;

Comentarii (5)

Aici's my lovitură de cuțit la a face Andy E's soluție excelentă într-un cu drepturi depline jQuery plugin:

;(function ($) {
    $.extend({      
        getQueryString: function (name) {           
            function parseParams() {
                var params = {},
                    e,
                    a = /\+/g,  // Regex for replacing addition symbol with a space
                    r = /([^&=]+)=?([^&]*)/g,
                    d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
                    q = window.location.search.substring(1);

                while (e = r.exec(q))
                    params[d(e[1])] = d(e[2]);

                return params;
            }

            if (!this.queryStringParams)
                this.queryStringParams = parseParams(); 

            return this.queryStringParams[name];
        }
    });
})(jQuery);

Sintaxa este:

var someVar = $.getQueryString('myParam');

Cel mai bun din ambele lumi!

Comentarii (0)

Daca're face mai multe URL-ul de manipulare decât pur și simplu parsarea querystring, puteți găsi URI.js utile. Este o bibliotecă pentru manipularea Url-uri și vine cu toate clopotele și fluierele. (Scuze pentru auto-publicitate aici)

pentru a converti querystring într-o hartă:

var data = URI('?foo=bar&bar=baz&foo=world').query(true);
data == {
  "foo": ["bar", "world"],
  "bar": "baz"
}

(URI.js de asemenea, "fixat" rău querystrings ca ?&foo&&bar=baz& "la"?foo&bar=baz)

Comentarii (2)

Îmi place Ryan Phelan's soluție. Dar eu nu't vedea orice punct de extinderea jQuery pentru asta? Nu există nici o utilizare de jQuery funcționalitate.

Pe de altă parte, îmi place built-in funcția de la Google Chrome: fereastra.locație.getParameter.

Deci, de ce să nu folosim acest lucru? Bine, alte browsere nu't au. Deci sa's a crea această funcție, dacă acesta nu există:

if (!window.location.getParameter ) {
  window.location.getParameter = function(key) {
    function parseParams() {
        var params = {},
            e,
            a = /\+/g,  // Regex for replacing addition symbol with a space
            r = /([^&=]+)=?([^&]*)/g,
            d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
            q = window.location.search.substring(1);

        while (e = r.exec(q))
            params[d(e[1])] = d(e[2]);

        return params;
    }

    if (!this.queryStringParams)
        this.queryStringParams = parseParams(); 

    return this.queryStringParams[key];
  };
}

Această funcție este mai mult sau mai puțin de la Ryan Phelan, dar este învelit în mod diferit: clar numele și nu există dependențe de alte biblioteci javascript. Mai multe despre această funcție pe blog-ul meu.

Comentarii (1)

Aici este o modalitate rapidă de a obține un obiect similar cu PHP $_GET serie:

function get_query(){
    var url = location.search;
    var qs = url.substring(url.indexOf('?') + 1).split('&');
    for(var i = 0, result = {}; i < qs.length; i++){
        qs[i] = qs[i].split('=');
        result[qs[i][0]] = decodeURIComponent(qs[i][1]);
    }
    return result;
}

Utilizare:

var $_GET = get_query();

Pentru șirul de interogare x=5&y&z=alo&x=6 acest lucru se întoarce la obiect:

{
  x: "6",
  y: undefined,
  z: "hello"
}
Comentarii (4)

Păstrați-l simplu în simplu cod JavaScript:

function qs(key) {
    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[key];
}

Suna de oriunde în cod JavaScript:

var result = qs('someKey');
Comentarii (2)

Acestea sunt toate mare raspunsuri, dar am nevoie de ceva un pic mai robust, și a crezut că v-ar dori să aibă ceea ce am creat.

Este o bibliotecă simplu metoda care face disecția și manipulare de parametrii URL. Metoda statică are următoarele sub-metode care pot fi numite pe subiectul URL:

  • getHost
  • getPath
  • getHash
  • setHash
  • getParams
  • getQuery
  • setParam
  • getParam
  • hasParam
  • removeParam

Exemplu:

URLParser(url).getParam('myparam1')

var url = "http://www.test.com/folder/mypage.html?myparam1=1&myparam2=2#something";

function URLParser(u){
    var path="",query="",hash="",params;
    if(u.indexOf("#") > 0){
        hash = u.substr(u.indexOf("#") + 1);
        u = u.substr(0 , u.indexOf("#"));
    }
    if(u.indexOf("?") > 0){
        path = u.substr(0 , u.indexOf("?"));
        query = u.substr(u.indexOf("?") + 1);
        params= query.split('&');
    }else
        path = u;
    return {
        getHost: function(){
            var hostexp = /\/\/([\w.-]*)/;
            var match = hostexp.exec(path);
            if (match != null && match.length > 1)
                return match[1];
            return "";
        },
        getPath: function(){
            var pathexp = /\/\/[\w.-]*(?:\/([^?]*))/;
            var match = pathexp.exec(path);
            if (match != null && match.length > 1)
                return match[1];
            return "";
        },
        getHash: function(){
            return hash;
        },
        getParams: function(){
            return params
        },
        getQuery: function(){
            return query;
        },
        setHash: function(value){
            if(query.length > 0)
                query = "?" + query;
            if(value.length > 0)
                query = query + "#" + value;
            return path + query;
        },
        setParam: function(name, value){
            if(!params){
                params= new Array();
            }
            params.push(name + '=' + value);
            for (var i = 0; i < params.length; i++) {
                if(query.length > 0)
                    query += "&";
                query += params[i];
            }
            if(query.length > 0)
                query = "?" + query;
            if(hash.length > 0)
                query = query + "#" + hash;
            return path + query;
        },
        getParam: function(name){
            if(params){
                for (var i = 0; i < params.length; i++) {
                    var pair = params[i].split('=');
                    if (decodeURIComponent(pair[0]) == name)
                        return decodeURIComponent(pair[1]);
                }
            }
            console.log('Query variable %s not found', name);
        },
        hasParam: function(name){
            if(params){
                for (var i = 0; i < params.length; i++) {
                    var pair = params[i].split('=');
                    if (decodeURIComponent(pair[0]) == name)
                        return true;
                }
            }
            console.log('Query variable %s not found', name);
        },
        removeParam: function(name){
            query = "";
            if(params){
                var newparams = new Array();
                for (var i = 0;i < params.length;i++) {
                    var pair = params[i].split('=');
                    if (decodeURIComponent(pair[0]) != name)
                          newparams .push(params[i]);
                }
                params = newparams;
                for (var i = 0; i < params.length; i++) {
                    if(query.length > 0)
                        query += "&";
                    query += params[i];
                }
            }
            if(query.length > 0)
                query = "?" + query;
            if(hash.length > 0)
                query = query + "#" + hash;
            return path + query;
        },
    }
}

document.write("Host: " + URLParser(url).getHost() + '<br>');
document.write("Path: " + URLParser(url).getPath() + '<br>');
document.write("Query: " + URLParser(url).getQuery() + '<br>');
document.write("Hash: " + URLParser(url).getHash() + '<br>');
document.write("Params Array: " + URLParser(url).getParams() + '<br>');
document.write("Param: " + URLParser(url).getParam('myparam1') + '<br>');
document.write("Has Param: " + URLParser(url).hasParam('myparam1') + '<br>');

document.write(url + '<br>');

// Remove the first parameter
url = URLParser(url).removeParam('myparam1');
document.write(url + ' - Remove the first parameter<br>');

// Add a third parameter
url = URLParser(url).setParam('myparam3',3);
document.write(url + ' - Add a third parameter<br>');

// Remove the second parameter
url = URLParser(url).removeParam('myparam2');
document.write(url + ' - Remove the second parameter<br>');

// Add a hash
url = URLParser(url).setHash('newhash');
document.write(url + ' - Set Hash<br>');

// Remove the last parameter
url = URLParser(url).removeParam('myparam3');
document.write(url + ' - Remove the last parameter<br>');

// Remove a parameter that doesn't exist
url = URLParser(url).removeParam('myparam3');
document.write(url + ' - Remove a parameter that doesn\"t exist<br>');
Comentarii (0)

De la MDN:

function loadPageVar (sVar) {
  return unescape(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + escape(sVar).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
}

alert(loadPageVar("name"));
Comentarii (0)

Eu folosesc expresii regulate o mulțime, dar nu pentru asta.

Se pare că mai ușor și mai eficient să citesc șir de interogare dată în cererea mea, și de a construi un obiect din toate perechi cheie/valoare, cum ar fi:

var search = function() {
  var s = window.location.search.substr(1),
    p = s.split(/\&/), l = p.length, kv, r = {};
  if (l === 0) {return false;}
  while (l--) {
    kv = p[l].split(/\=/);
    r[kv[0]] = decodeURIComponent(kv[1] || '') || true;
  }
  return r;
}();

Pentru un URL de genul http://domain.com?param1=val1&param2=val2 puteți obține valoarea lor mai târziu în codul dvs., ca de căutare.param1 " și " căutare.param2.

Comentarii (0)

Codul de golf:

var a = location.search&&location.search.substr(1).replace(/\+/gi," ").split("&");
for (var i in a) {
    var s = a[i].split("=");
    a[i]  = a[unescape(s[0])] = unescape(s[1]);
}

Afișa!

for (i in a) {
    document.write(i + ":" + a[i] + "<br/>"); 
};

Pe Mac-ul meu: test.htm?i=poate&a=cheezburger afișează

0:can
1:cheezburger
i:can
has:cheezburger
Comentarii (2)

Roshambo metoda jQuery a fost't grijă de a decoda URL

Adăugat capacitatea asta, de asemenea, în timp ce adăugarea în declarația de retur

return decodeURIComponent(results[1].replace(/\+/g, " ")) || 0;

Acum puteți găsi actualizat gist:

$.urlParam = function(name){
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (!results) { return 0; }
return decodeURIComponent(results[1].replace(/\+/g, " ")) || 0;
}
Comentarii (0)