Diviser et analyser window.location.hash

Je suis confronté à des problèmes avec la division et l'analyse window.location.hash correctement.

Tout d'abord, nous obtenons quelques paramètres dans hash, ex:

#loc=austria&mr=1&min=10&max=89 

Comme vous le voyez certainement, il a été créé pour la recherche. Lorsque l'utilisateur clique sur la page de lien de pagination est rechargé avec le hash. Jusqu'ici tout va bien.

J'ai créé la fonction initialise () qui appelle chaque fois qu'il y a hash dans l'URL:

 if (window.location.hash) { var params = (window.location.hash.substr(1)).split("&"); for (i = 0; i < params.length; i++) { var a = params[i].split("="); // Now every parameter from the hash is beind handled this way if (a[0] == "loc") { locationList(a[1]); } } } 

Everythig travaille presque … Quand je choisis tous les params de recherche, hash est … coupé. Pour une raison inconnue pour moi. J'ai essayé d'utiliser if( params.indexOf('loc') ) au lieu d' a[0] == "loc" sans chance.

Pourriez-vous me prêter main-forte?

modifier
Bien sûr, j'utilise var a = … en boucle, ce n'était qu'une erreur de copier-coller.

Vous n'avez pas besoin d'une boucle, si ce n'est que la valeur de loc du hash que vous attendez. Cela devrait également fonctionner.

 var lochash = location.hash.substr(1), mylocation = lochash.substr(lochash.indexOf('loc=')) .split('&')[0] .split('=')[1]; if (mylocation) { locationList(myLocation); } 

Concernant la dérivation du hash après une recharge de page: imho qui n'est pas lié à votre boucle.

Modifier Une approche plus moderne et plus précise:

 const result = document.querySelector("#result"); const hash2Obj = "loc=austria&mr=1&min=10&max=89" .split("&") .map( el => el.split("=") ) .reduce( (pre, cur) => { pre[cur[0]] = cur[1]; return pre; }, {} ); result.textContent += `loc => ${hash2Obj.loc} ---- *hash2Obj (stringified): ${JSON.stringify(hash2Obj, null, ' ')}`; 
 <pre id="result"></pre> 

Si vous utilisez jQuery, consultez le plugin jQuery BBQ

Il «s'appuie sur l'événement HTML5 hashchange», qui vous permet essentiellement d'exécuter le code JavaScript une fois que le hash a été modifié.

En outre, il est livré avec une puissante fonction " dépram ", qui vous permet de "Analyser la chaîne de requête à partir d'une URL ou la fenêtre actuelle. Emplacement, la désérialiser dans un objet, facultativement contraindre des nombres, des valeurs booléennes, nulles et non définies".

params.indexOf('loc') ne renverra pas une valeur, car il n'existe pas de local dans le réseau de params . L'élément que vous recherchez dans l'exemple fourni est loc=austria . Si vous sélectionnez uniquement par la clé, vous auriez besoin d'une boucle pour examiner chaque paire clé-valeur.