2010-10-27 30 views
0

Quel est le problème avec cela?Erreur de remplacement de hachage Javascript

le hachage est: #/search = bonjour/somethingelse/

window.location.hash.replace(/search=([^\/]*)/gi, "search=" + value); 

EDIT:

Je veux juste changer une partie spécifique de l'hash pas tout hash.

Répondre

4

hash.replace() ne change pas réellement le hachage, seulement retourner une valeur (comme c'est une fonction de chaîne). Essayez d'attribuer ce résultat, en utilisant:

window.location.hash = window.location.hash.replace(/search=([^\/]*)/gi, "search=" + value); 

D'autre part, window.location.replace()est en fait une fonction qui modifie l'URL, mais cela ne fonctionne pas directement avec les expressions rationnelles.

1

Avez-vous oublié de l'assigner?

replace() est une fonction String et renvoie un nouvel objet String, il ne modifie pas la chaîne d'origine.

window.location.hash = window.location.hash.replace(/search=([^\/]*)/gi, "search=" + value); 
0

Les chaînes JavaScript sont immuables, je crois. (une recherche rapide sur Google montre que SO et Wikipedia me soutiennent)

Cela signifie en fait que leur valeur ne peut pas être modifiée sans une instruction d'affectation.

Par conséquent, String.replace(...) ne modifie pas la valeur de la chaîne, mais renvoie à la place une nouvelle chaîne.

var replaced = window.location.hash.replace(/search=([^\/]*)/gi, "search=" + value); 

Maintenant, puisque vous êtes sans doute essayer de changer le window.location.hash vous êtes probablement la pêche pour ...

window.location.hash = window.location.hash.replace(/search=([^\/]*)/gi, "search=" + value); 
+1

Votre deuxième déclaration est incorrecte, leurs valeurs ne peuvent jamais être modifiés, c'est la définition de immuable. –

+0

Jacob, tu sais ce qu'il voulait dire. :-) –

+0

@Jacob Ralkin - C'est vrai, mais je sacrifiais la précision pour la clarté; D'un point de vue pratique, pour un débutant, je pense que la déclaration est toujours exacte, mais pas correcte. –