Parsing von URL-Hash/Fragment-ID mit JavaScript

Lesezeit: 5 Minuten

Parsing von URL HashFragment ID mit JavaScript
Yarin

Suche nach einer Möglichkeit, Schlüsselpaare aus dem Hash/Fragment einer URL in ein Objekt/assoziatives Array mit JavaScript/JQuery zu parsen

  • 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

Parsing von URL HashFragment ID mit JavaScript
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

1643236511 597 Parsing von URL HashFragment ID mit JavaScript
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

1643236512 970 Parsing von URL HashFragment ID mit JavaScript
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


Parsing von URL HashFragment ID mit JavaScript
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

1643236512 526 Parsing von URL HashFragment ID mit JavaScript
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;
};

.

652150cookie-checkParsing von URL-Hash/Fragment-ID mit JavaScript

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy