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?
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.
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'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.
<script>var urlParams = <?php echo json_encode($_GET, JSON_HEX_TAG);?>;</script>
Mult mai simplu!
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;
}, {}
)
: {}
};
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)
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¶m2=val"
//Update the url/querystring in the browser's location bar with the $.QueryString object
history.replaceState({}, '', "?" + $.param($.QueryString));
//-or-
history.pushState({}, '', "?" + $.param($.QueryString));
Pregătirea cod: metode declarație
var qs = window.GetQueryString(query);
var search = qs["q"];
var value = qs["value"];
var undef = qs["undefinedstring"];
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
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/
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.
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'
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)})
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
"?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"
To acces la diferitele părți ale unui URL folosesc locație.(căutare|hash)`
var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
"?a=1&b=0&c=3&d&e&a=5"
> queryDict
a: "5"
b: "0"
c: "3"
d: undefined
e: undefined
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]]})
> qd
a: ["1", "5"]
b: ["0"]
c: ["3"]
d: [undefined]
e: [undefined]
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]})
"?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"]
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(...)
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.
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ă.
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;
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!
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
)
Î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.
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"
}
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');
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:
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>');
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¶m2=val2
puteți obține valoarea lor mai târziu în codul dvs., ca de căutare.param1 " și " căutare.param2
.
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
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;
}