Comment réécrire une valeur href à l’aide de jQuery?
J’ai des liens avec une ville par défaut
parks malls
Si l’utilisateur entre une valeur dans une zone de texte #city, je souhaite remplacer Paris par la valeur entrée par l’utilisateur.
Jusqu’ici j’ai
var newCity = $("#city").val();
Étant donné que vous avez des valeurs href
uniques ( ?what=parks
, et ?what=malls
), je suggérerais de ne pas écrire de chemin dans la $.attr()
; vous auriez besoin d’un appel à $.attr()
pour chaque href
unique, et cela deviendrait très redondant, très rapidement – sans parler de la difficulté à gérer.
Ci-dessous, j’appelle $.attr()
et utilise une fonction pour remplacer uniquement la partie &city=
par la nouvelle ville. La bonne chose à propos de cette méthode est que ces 5 lignes de code peuvent mettre à jour des centaines de liens sans détruire le rest des valeurs href
sur chaque lien.
$("#city").change(function(o){ $("a.malls").attr('href', function(i,a){ return a.replace( /(city=)[az]+/ig, '$1'+o.target.value ); }); });
Il y a une chose à surveiller: les espaces et le boîtier. Vous pouvez tout convertir en minuscules à l’aide de la méthode JavaScript .toLowerCase()
et remplacer les espaces par un autre appel à .replace()
comme indiqué ci-dessous:
'$1'+o.target.value.replace(/\s+/, '');
Démo en ligne: http://jsbin.com/ohejez/
$('a').attr("href", "/search/?what=parks&city=" + newCity);
Dès qu’une clé est relâchée dans le #city
saisie #city
, la href
sera mise à jour.
$('#city').keyup(function(){ $('a').attr('href','/search/?what=parks&city='+$(this).val()); });
Comme ça:
var newCity = $("#city").val(); $('a').attr('href', '/search/?what=parks&city=' + newCity);
EDIT: Ajout de la chaîne de recherche