Vous cherchez un moyen d'analyser des paires de clés sur le hachage/fragment d'une URL dans un objet/tableau associatif avec JavaScript/JQueryURL Parsing identificateur de hachage/fragment avec JavaScript
Répondre
Départ: jQuery BBQ
BBQ jQuery est conçu pour analyser les choses de l'URL (chaîne de requête ou fragment), et va un peu plus loin pour simplifier l'histoire basée sur les fragments. C'est le plugin jQuery que recherchait Yarin avant de mettre en place une solution js pure. Plus précisément, la fonction deparam.fragment() fait le travail. Regarde! Le site de support sur lequel je travaille utilise une recherche asynchrone, et parce que le BBQ rend trivial de placer des objets entiers dans le fragment, je l'utilise pour 'persister' mes paramètres de recherche. recherches, et leur permet également de créer des signets recherches utiles le meilleur de tous, quand QA trouve un défaut de recherche, ils peuvent relier directement aux résultats problématiques)
@ Hovis- c'est en effet un plugin génial, et en fait je suis passé à l'utiliser aussi bien. Vous donner la réponse car c'est une bien meilleure option que ma fonction scratch. – Yarin
Je vais commencer à l'utiliser. –
Le barbecue ne fonctionne pas bien avec Jquery 1.9+ et génère des exceptions en charge. Il n'a pas été mis à jour depuis plus de trois ans. Je ne suis pas sûr que le barbecue soit toujours une bonne recommandation. Vous pouvez peut-être le pirater pour le faire fonctionner, voir ceci: https://github.com/cowboy/jquery-bbq/pull/41 – nostromo
J'utilise la bibliothèque jQuery URL Parser.
Ceci analyse l'URL elle-même - pas les éléments de hachage. Utile, mais pas sur la question originale. –
Ici, il est, modifié de cette 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;
}
Pas JQuery/plug-in nécessaire
Mise à jour:
Je suis maintenant recommander la jQuery BBQ plugin selon la réponse de Hovis . Il couvre tous les problèmes d'analyse syntaxique.
pourriez-vous élaborer sur les «problèmes d'analyse de hachage»?J'ai le même besoin et je ne vois rien de mal dans votre réponse. – Christophe
@ Christophe- Je ne peux honnêtement pas me souvenir. Je suis sûr que mon code fonctionne bien, mais BBQ est un plugin total avec des événements hashchange, l'analyse des chaînes de requête, etc, donc probablement ce que je voulais dire .. – Yarin
Pour la manipulation de base de votre script est génial! Trop souvent, nous utilisons par défaut les bibliothèques jQuery pour les tâches de base. Merci! – SomethingOn
Ma réponse à this question devrait faire ce que vous cherchez.!
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;
};
Vous voudrez peut-être vérifier jsuri. Cela semble bien fonctionner pour moi.
Le lien est maintenant mort. –
Vous pouvez également utiliser la propriété .hash, illustrée dans cet exemple scrolling table of contents pour un lien cliqué ou pour le locatioin.
Cette jquery API ne parse balises de hachage: https://jhash.codeplex.com/
// get the "name" querystring value
var n = jHash.val('name');
// get the "location" querystring value
var l = jHash.val('location');
// set some querystring values
jHash.val({
name: 'Chris',
location: 'WI'
});
utilisez la réponse de gatoatigrado, c'est mieux que celui que j'ai posté – SomeoneElse
Je regardais à travers un tas de réponses à ce problème et liquidée les bricolant ensemble en utilisant une ligne avec reduce
:
const hashObj = location.hash.replace('#', '').split('&').reduce((prev, item) => Object.assign({[item.split('=')[0]]: item.split('=')[1]}, prev), {});
Il y a évidemment beaucoup de choses dans cette ligne. Il peut être réécrite comme celui-ci pour clariry:
const hashObj = location.hash.replace('#', '').split('&').reduce((prev, item) => {
return Object.assign({[item.split('=')[0]]: item.split('=')[1]}, prev);
}, {});
Faites ceci en pur 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;
}, {});
Vous pourriez probablement faire avec un regexp assez simple. Quel "format" sont les paires clé/valeur dans l'URL? – gnarf
Identique à ce qu'ils seraient dans une chaîne de requête - voir ma réponse – Yarin