Gibt es eine Plugin-losen Weg zum Abrufen von Abfragezeichenfolge Werte über jQuery (oder ohne)?
Wenn ja, wie? Wenn nicht, gibt es ein Plugin, das dies tun kann?
Aktualisierung: Sep-2018
Sie können URLSearchParams verwenden, das einfach ist und anständige (aber nicht vollständige) Browserunterstützung bietet.
const urlParams = new URLSearchParams(window.location.search);
const myParam = urlParams.get('myParam');
Original
Sie brauchen kein jQuery für diesen Zweck. Sie können einfach reines JavaScript verwenden:
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, ' '));
}
Verwendung:
// 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)
Hinweis: Wenn ein Parameter mehrmals vorkommt (?foo=lorem&foo=ipsum
), erhält man den ersten Wert (lorem
). Hierzu gibt es keinen Standard und die Verwendung variiert, siehe z.B. diese Frage: Maßgebliche Position von doppelten HTTP-GET-Abfrageschlüsseln.
HINWEIS: Die Funktion unterscheidet zwischen Groß- und Kleinschreibung. Wenn Sie die Groß-/Kleinschreibung des Parameternamens nicht beachten wollen, fügen Sie den Modifikator 'i' zu RegExp hinzu
Dies ist eine Aktualisierung, die auf den neuen URLSearchParams specs basiert, um das gleiche Ergebnis in kürzerer Zeit zu erreichen. Siehe Antwort mit dem Titel "URLSearchParams" unten.
Roshambo auf snipplr.com hat ein einfaches Skript, um dies zu erreichen, beschrieben in Get URL Parameters with jQuery | Improved. Mit seinem Skript können Sie auch einfach nur die gewünschten Parameter herausziehen.
Hier ist die Kurzfassung:
$.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;
}
Dann holen Sie sich einfach Ihre Parameter aus dem Query-String.
Wenn also die URL/der Abfrage-String xyz.com/index.html?lang=de
war.
Rufen Sie einfach var langval = $.urlParam('lang');
auf, und Sie haben es geschafft.
UZBEKJON hat dazu auch einen tollen Blog-Beitrag, Get URL parameters & values with jQuery.
Wenn Sie jQuery verwenden, können Sie eine Bibliothek verwenden, z. B. jQuery BBQ: Back Button & Query Library.
...jQuery BBQ bietet eine vollständige "deparam()"-Methode, zusammen mit Hash-Status-Management und Fragment / Query String Parse und Merge-Dienstprogramm Methoden.
Bearbeiten: Hinzufügen Deparam Beispiel:
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();
}
};
Wenn Sie nur einfaches JavaScript verwenden möchten, können Sie...
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;
}
})();
Aufgrund der neuen HTML History API und insbesondere history.pushState()
und history.replaceState()
kann sich die URL ändern, wodurch der Cache der Parameter und ihrer Werte ungültig wird.
In dieser Version wird der interne Cache der Parameter jedes Mal aktualisiert, wenn sich die Historie ändert.