Suche nach einer Möglichkeit, Schlüsselpaare aus dem Hash/Fragment einer URL in ein Objekt/assoziatives Array mit JavaScript/JQuery zu parsen
Parsing von URL-Hash/Fragment-ID mit JavaScript
Yarin
Yarin
Hier ist es, modifiziert von diesem Query-String-Parser:
function getHashParams() {
var hashParams = {};
var e,
a = /+/g, // Regex for replacing addition symbol with a space
r = /([^&;=]+)=?([^&;]*)/g,
d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
q = window.location.hash.substring(1);
while (e = r.exec(q))
hashParams[d(e[1])] = d(e[2]);
return hashParams;
}
Kein JQuery/Plugin erforderlich
Aktualisieren:
Ich empfehle jetzt die jQuery-BBQ-Plugin gemäß der Antwort von Hovis. Es deckt alle Hash-Parsing-Probleme ab.
Aktualisierung (2019)
Anscheinend gibt es jetzt eine URLSearchParams-Funktion – siehe Antwort von @Berkant
-
Könnten Sie die “Hash-Parsing-Probleme” näher erläutern? Ich habe das gleiche Bedürfnis und ich sehe nichts Falsches an Ihrer Antwort.
– Christoph
11. Oktober 12 um 21:03 Uhr
-
@Christophe- Ich kann mich ehrlich gesagt nicht erinnern. Ich bin mir sicher, dass mein Code gut funktioniert, aber BBQ ist ein komplettes Plugin mit Hashchange-Ereignissen, Analyse von Abfragezeichenfolgen usw., also habe ich wahrscheinlich das gemeint.
– Jarin
12. September 13 um 16:31 Uhr
-
Für die grundlegende Handhabung ist Ihr Skript großartig !! Zu oft verwenden wir standardmäßig jQuery-Bibliotheken für grundlegende Aufgaben. Danke!
– EtwasEin
7. Februar 14 um 15:46 Uhr
-
Was macht ein Semikolon in der
r
regulärer Ausdruck?– Geb
29. November 17 um 9:53 Uhr
-
Jquery BBQ wird nicht mehr aktualisiert und hat Probleme mit der neuesten JQuery.
– crthompson
19. Oktober 18 um 18:55 Uhr
Berkant Ipek
Benutzen URLSearchParams. Browserabdeckung: https://caniuse.com/urlsearchparams. Es wird in den wichtigsten Browsern vollständig unterstützt. Hier ist ein Polyfill, wenn Sie dies in nicht unterstützten Browsern verwenden müssen.
So lesen Sie einen einfachen Schlüssel:
// window.location.hash = "#any_hash_key=any_value"
const parsedHash = new URLSearchParams(
window.location.hash.substr(1) // skip the first char (#)
);
console.log(parsedHash.get("any_hash_key")); // any_value
Schauen Sie sich die Mozilla-Dokumentation an, die ich oben verlinkt habe, um alle Methoden der Schnittstelle zu sehen.
-
Einverstanden. Außerdem ist das Format für mehrere Parameter wie erwartet: a=foo&b=bar
– Richard
11. November 19 um 5:35 Uhr
-
Dies sollte die Top-Antwort sein, anstelle aller alten. Danke!
– Charmanter Roboter
31. Mai 20 um 21:39 Uhr
-
Auch für alle, die stattdessen den geparsten Hash als Objekt haben möchten:
Object.fromEntries(parsedHash)
– Weltsayshi
29. November 21 um 11:28 Uhr
Hovis Biddle
Kasse: jQuery-BBQ
jQuery BBQ wurde entwickelt, um Dinge aus der URL (Abfragezeichenfolge oder Fragment) zu analysieren, und geht etwas weiter, um den fragmentbasierten Verlauf zu vereinfachen. Dies ist das jQuery-Plugin, nach dem Yarin gesucht hat, bevor er eine reine js-Lösung zusammengestellt hat. Insbesondere die deparam.fragment() Funktion macht den Job. Guck mal!
(Die Support-Site, an der ich arbeite, verwendet eine asynchrone Suche, und da BBQ es trivial macht, ganze Objekte in das Fragment zu stecken, verwende ich es, um meine Suchparameter zu “bestehen”. Dies gibt meinen Benutzern Verlaufszustände für ihre Suchen und auch ermöglicht es ihnen, nützliche Suchen mit Lesezeichen zu versehen. Das Beste ist, wenn die QA einen Suchfehler findet, kann sie direkt zu den problematischen Ergebnissen verlinken!)
-
@Hovis- das ist in der Tat ein großartiges Plugin, und tatsächlich bin ich dazu übergegangen, es auch zu verwenden. Ich gebe Ihnen die Antwort, da es eine viel bessere Option ist als meine Scratch-Funktion.
– Jarin
30. November 11 um 21:35 Uhr
-
Ich werde anfangen, dies zu verwenden.
– Der Muffinmann
17. Dezember 11 um 19:02 Uhr
-
BBQ funktioniert nicht gut mit Jquery 1.9+ und löst beim Laden Ausnahmen aus. Es wurde seit über drei Jahren nicht aktualisiert. Ich bin mir nicht sicher, ob BBQ immer noch eine gute Empfehlung ist. Möglicherweise können Sie es hacken, damit es funktioniert, siehe hier: github.com/cowboy/jquery-bbq/pull/41
– nostromo
21. Oktober 13 um 7:05 Uhr
crthompson
Tun Sie dies in reinem Javascript:
var hash = window.location.hash.substr(1);
var result = hash.split('&').reduce(function (result, item) {
var parts = item.split('=');
result[parts[0]] = parts[1];
return result;
}, {});
http://example.com/#from=2012-01-05&to=2013-01-01
wird
{from: '2012-01-05', to:'2013-01-01'}
ich benutze jQuery-URL-Parser Bücherei.
-
Dies analysiert die URL selbst – nicht die Hash-Elemente. Nützlich, aber nicht das, worum es in der ursprünglichen Frage geht.
– Dan Esparza
15. Dezember ’10 um 18:30 Uhr
Ich habe eine Reihe von Antworten für dieses Problem durchgesehen und sie am Ende mit einer Zeile zusammengeschustert reduce
:
const hashObj = location.hash.replace('#', '').split('&').reduce((prev, item) => Object.assign({[item.split('=')[0]]: item.split('=')[1]}, prev), {});
In dieser einen Zeile ist offensichtlich viel los. Es kann für Klarheit wie folgt umgeschrieben werden:
const hashObj = location.hash.replace('#', '').split('&').reduce((prev, item) => {
return Object.assign({[item.split('=')[0]]: item.split('=')[1]}, prev);
}, {});
-
Dies analysiert die URL selbst – nicht die Hash-Elemente. Nützlich, aber nicht das, worum es in der ursprünglichen Frage geht.
– Dan Esparza
15. Dezember ’10 um 18:30 Uhr
Gemeinschaft
Meine Antwort auf diese Frage sollte das tun, wonach Sie suchen:
url_args_decode = function (url) {
var args_enc, el, i, nameval, ret;
ret = {};
// use the DOM to parse the URL via an 'a' element
el = document.createElement("a");
el.href = url;
// strip off initial ? on search and split
args_enc = el.search.substring(1).split('&');
for (i = 0; i < args_enc.length; i++) {
// convert + into space, split on =, and then decode
args_enc[i].replace(/+/g, ' ');
nameval = args_enc[i].split('=', 2);
ret[decodeURIComponent(nameval[0])]=decodeURIComponent(nameval[1]);
}
return ret;
};
.
Sie könnten es wahrscheinlich mit einem ziemlich einfachen regulären Ausdruck machen. Welches “Format” haben die Schlüssel/Wert-Paare in der URL?
– gnarf
16. November 10 um 18:59 Uhr
Genauso wie in einer Abfragezeichenfolge – siehe meine Antwort
– Jarin
16. November 10 um 19:23 Uhr