2011-06-30 19 views
10

¿Cómo reescribo un valor de href, usando jQuery?Cambiar el valor de href con jQuery

que tienen vínculos con una ciudad por defecto

<a href="/search/?what=parks&city=Paris">parks</a> 
<a href="/search/?what=malls&city=Paris">malls</a> 

Si el usuario introduce un valor en un cuadro de texto #city quiero reemplazar París con el valor introducido por el usuario.

Hasta ahora he

var newCity = $("#city").val(); 
+0

Yo recomendaría hacer esto con formularios, porque la forma en que lo hace ahora hace que su función de búsqueda no se pueda usar sin javascript. – Kokos

Respuesta

28

Dado que tiene href valores únicos (?what=parks y ?what=malls) Me gustaría sugerir no escribir una ruta de acceso en el método $.attr(); tendrías que tener una llamada al $.attr() para cada href único, y eso sería muy redundante, muy rápido, por no mencionar difícil de gestionar.

A continuación, estoy haciendo una llamada al $.attr() y utilizando una función para reemplazar solo la parte &city= con la nueva ciudad. Lo bueno de este método es que estas 5 líneas de código pueden actualizar cientos de enlaces sin destruir el resto de los valores href en cada enlace.

$("#city").change(function(o){ 
    $("a.malls").attr('href', function(i,a){ 
    return a.replace(/(city=)[a-z]+/ig, '$1'+o.target.value); 
    }); 
}); 

Una cosa que es posible que desee tener en cuenta serían los espacios y la carcasa. Se podría convertir todo a minúsculas utilizando el método de JavaScript .toLowerCase(), y puede reemplazar los espacios con otra llamada a .replace() como he abajo:

'$1'+o.target.value.replace(/\s+/, ''); 

Demo Online: http://jsbin.com/ohejez/

+1

¿por qué usar expresiones regulares cuando no es necesario? ¿no sería eso técnicamente más lento y err ... clunkier? – AndyL

+3

@AndyL Porque mañana la URL puede no ser '/ search /? What = parts & city = Paris', sino'/search /? When = afternoon & what = parks & city = Paris' u otra variante. No debería tener que ir a reescribir su JavaScript para acomodar esos tipos de cambios; Sería demasiado pesado, en mi sincera opinión. – Sampson

+0

punto válido, aunque definitivamente depende de la aplicación. – AndyL

2

De esta manera:

var newCity = $("#city").val(); 

$('a').attr('href', '/search/?what=parks&city=' + newCity); 

EDIT: añadido la cadena de búsqueda

+4

Esto reemplazará la URL completa, no solo el valor del parámetro 'city'. –

+0

Gracias, estoy bastante seguro de que el OP se habría dado cuenta. – Phil

14
$('a').attr("href", "/search/?what=parks&city=" + newCity); 
4

Tan pronto como se suelta una tecla en el #city campo de entrada, se actualizará el href re.

$('#city').keyup(function(){ 

    $('a').attr('href','/search/?what=parks&city='+$(this).val()); 

}); 
+0

Esta es la mejor solución. – Phil

+0

gracias !! bueno uno Aunque realicé algunos cambios ... agregué la devolución de llamada "onkeyup" a la "entrada". algo como y en esta función de devolución de llamada he agregado el código. ¡Gracias! – OhadR

Cuestiones relacionadas