2008-10-24 45 views
6

tengo este código que me diera un vuelco en los botones de envío, y yo estoy tratando de hacer que sea más genérico:Buscar y reemplazar jQuery

$('.rollover').hover(
      function(){ // Change the input image's source when we "roll on" 
       srcPath = $(this).attr("src"); 
          srcPathOver = ??????? 
       /*need to manipulate srcPath to change from 
       img/content/go-button.gif 
       into 
       img/content/go-button-over.gif 
       */ 
       $(this).attr({ src : srcPathOver}); 
      }, 
      function(){ // Change the input image's source back to the default on "roll off" 
       $(this).attr({ src : srcPath}); 
      } 
    ); 

Dos cosas realmente,

quiero aprender cómo manipular la variable srcPath para agregar el texto '-over' al nombre de archivo gif, para dar una nueva imagen para el rollover. ¿Alguien puede sugerir una manera de hacer esto?

Además, ¿alguien puede decirme si este código podría refinarse en absoluto? Soy un poco nuevo en jQuery y me pregunté si se podría mejorar la sintaxis.

Muchas gracias.

Respuesta

13
$('.rollover').hover(
      function(){ // Change the input image's source when we "roll on" 
       var t = $(this); 
       t.attr('src',t.attr('src').replace(/([^.]*)\.(.*)/, "$1-over.$2")); 
      }, 
      function(){ 
       var t= $(this); 
       t.attr('src',t.attr('src').replace('-over','')); 
      } 
    ); 
+0

No se olvide var, var como en t = ... –

+0

edición: THX ... añade el var – jcampbell1

2

Debería poder usar un reemplazo de expresiones regulares para modificar su ruta de origen. De esta manera:

srcPathOver = srcPath.replace(/([^.]*)\.(.*)/, "$1-over.$2"); 

Más sobre expresiones regulares JavaScript here

En cuanto a la forma en que lo haces, me aseguraría de que se defina la variable de SRCPATH como esto

var srcPath; 
$('.rollover').hover(... 

El El código que tienes arriba hace que parezca que srcPath es una variable global, que no es lo que quieres.

6

Para manipular el nombre del archivo y anexar "frente a los" simplemente tiene que hacer un poco de manipulación de cadenas Javascript, así:

function appendOver(srcPath){ 
    var index = s.indexOf('.'); 

    var before = s.substr(0, index); 
    var after = s.substr(index); 

    return before + "-over" + after; 
} 

Esto debería devolver el nombre del archivo original (en todos los formatos posibles) y añadir la '-over' cadena justo antes del punto de extensión.