Mai mult
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?
2701
73
Actualizare: Sep-2018
Puteți utiliza URLSearchParams, care este simplu și are decente (dar nu complet) suport pentru browser-ul.
*Original ***
Nu't nevoie de jQuery pentru acest scop. Puteți folosi doar o pură JavaScript:
Utilizare:
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 RegExpAceasta 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.
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.
Exemplu de interogare:
Rezultatul:
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,
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:;
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'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.Mult mai simplu!
ES2015 (ES6)
Fără jQuery
Cu un URL de genul
?subiect=123&nume=interogare+string
, următoarele vor reveni:Google metodă
Ruperea Google's cod am gasit metoda pe care o folosesc:
getUrlParameters
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 egalb[f][p]("=")
(care se pare caindexOf
, 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
Utilizare
De testare de performanță (split metodă împotriva regex metoda) (jsPerf)
Pregătirea cod: metode declarație
Split cod de încercare
Regex cod de încercare
Testarea în Firefox 4.0 x86 pe Windows Server 2008 R2 / 7 x64
Versiune îmbunătățită a Artem Barger's a răspunde:
Pentru mai multe informații privind îmbunătățirea vedea: http://james.padolsey.com/javascript/bujs-1-getparameterbyname/
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":
sau
Sau, desigur, pe orice URL-ul:
Puteți obține params, de asemenea, folosind o prescurtare
.searchParams
proprietate pe URL-ul de obiect, astfel: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.
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:
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:tl;dr
Un mod rapid, soluție completă, care se ocupă de multivoci chei și de caractere codificate.
Multi-căptușite:
Ce este tot acest cod... "nul-coalescență", scurt-circuit evaluare ES6 Destructurare misiuni, Săgeata funcții, Șablon siruri de caractere
Exemplu:
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
Multi-evaluate chei
Cheie simplă verificare
(articol din dict) ? dict.element.push(val) : dict.element = [val]
Caractere codate?
Folosesc decodeURIComponent()` pentru cel de-al doilea sau ambele desparte.
Exemplu:
# 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.)_
Dacă querystring este gol (
locul de amplasare.căutare == ""
), rezultatul este oarecum înșelătoareqd == {"": nedefinit}
. Este sugerat pentru a verifica querystring înainte de lansarea funcție de parsare likeso: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:
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.
Daca're folosind jQuery, puteți utiliza o bibliotecă, precum jQuery GRĂTAR: Butonul Back & Bibliotecă Interogare.
Edit: Adăugarea Deparam Exemplu:
Dacă doriți să utilizați doar simple JavaScript, ai putea folosi...
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ă.
Doar folosi două fisuri:
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).
Deci, dacă știi că ai câștigat't alerga într-Rup's contra-caz, acesta câștigă. În caz contrar, regexp.
Aici's my lovitură de cuțit la a face Andy E's soluție excelentă într-un cu drepturi depline jQuery plugin:
Sintaxa este:
Cel mai bun din ambele lumi!
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ă:
(URI.js de asemenea, "fixat" rău querystrings ca
?&foo&&bar=baz& "la"?foo&bar=baz
)Î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ă:
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.
Aici este o modalitate rapidă de a obține un obiect similar cu PHP $_GET serie:
Utilizare:
Pentru șirul de interogare
x=5&y&z=alo&x=6
acest lucru se întoarce la obiect:Păstrați-l simplu în simplu cod JavaScript:
Suna de oriunde în cod JavaScript:
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:
Exemplu:
De la MDN:
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:
Pentru un URL de genul
http://domain.com?param1=val1¶m2=val2
puteți obține valoarea lor mai târziu în codul dvs., ca decăutare.param1 " și " căutare.param2
.Codul de golf:
Afișa!
Pe Mac-ul meu:
test.htm?i=poate&a=cheezburger
afișează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
Acum puteți găsi actualizat gist: