2010-10-07 28 views
14

He visto que la mayoría de las personas lo harán con esta solución que al pasar el mouse, tomaremos el valor en el atributo TITLE y luego eliminaremos su valor. Mientras está en el mouse, lo volveremos a poner.jquery: ocultar el atributo de título pero no eliminarlo

$(this).attr('title',''); 

o

$(this).removeAttr('title'); 

que quiero saber es posible simplemente ocultar la información sobre herramientas de aparecer de eliminar el atributo de título?

gracias!

Respuesta

33

No, no puede, ya que el navegador decidirá qué hacer con el atributo de título. Puede, sin embargo, guardarlo con el nodo para su posterior consulta (y posiblemente restaurar el título):

$(this).data("title", $(this).attr("title")).removeAttr("title"); 
+0

$ (este) .data() es un lugar muy útil para almacenar ese tipo de cosas. +1 por mencionarlo. :-) –

+0

gracias! esta solución es interesante! ¿puedo saber cómo puedo usar esta información almacenada? Necesito pasar los datos a una var como esta es mi var path original = $ (this) .attr ("title"); ¡Gracias! – laukok

+0

$ (this) .data ("title") le dará acceso a los datos almacenados. – FRotthowe

6

Puede almacenar el título en otro lugar, mientras que el ratón está sobre el elemento. Sin embargo, no tienes que guardarlo en el DOM; puede mantenerlo en un JS var:

(function(){ 
    var ttext; 
    $(yourtargetselectorhere).hover(function(){ 
    ttext = $(this).attr('title'); 
    $(this).removeAttr('title'); 
    }, 
    function(){ 
    $(this).attr('title', ttext); 
    }); 
}()); 
+0

gracias por esto! – Romtim

1

Miedo a que no se pueda. El método preventDefault() no parece funcionar para esto, lo cual es desafortunado porque sería ideal.

Si realmente necesita para retener el título atributo que podría hacer algo como esto:

$(document).ready(function(){ 
     $("a").hover(function(){ 

     // Get the current title 
     var title = $(this).attr("title"); 

     // Store it in a temporary attribute 
     $(this).attr("tmp_title", title); 

     // Set the title to nothing so we don't see the tooltips 
     $(this).attr("title",""); 
     }, 

     function() { // Fired when we leave the element 

     // Retrieve the title from the temporary attribute 
     var title = $(this).attr("tmp_title"); 

     // Return the title to what it was 
     $(this).attr("title", title); 
     }); 
}); 

es bastante complicado sin embargo. A menos que haya una razón específica por la que necesite conservar los atributos del título, simplemente los eliminaría.

+0

gracias. ¡es bueno saberlo! Voy a trabajar en ello y evitar poner atributos de título en mi etiqueta :-) – laukok

3

gracias por su solución. Tuve el mismo problema en un proyecto. El problema era que aparecía un título feo y largo cuando movía la imagen y necesitaba el título en emergente porque en el atributo de título, coloco un enlace de compra a un producto. pero, como dije, un título largo que incluye una etiqueta también aparece al pasar el mouse sobre él. así que acabo de agregar una función .click al final de su solución, no sé si es posible resolver esto de una manera más semántica, ya que no soy un experto en jquery. la secuencia de comandos completa se pega a continuación, respecto :)

$(".collection-box a").hover(function(){ 

    // Get the current title 
    var title = $(this).attr("title"); 

    // Store it in a temporary attribute 
    $(this).attr("tmp_title", title); 

    // Set the title to nothing so we don't see the tooltips 
    $(this).attr("title",""); 
    }, 

    function() { // Fired when we leave the element 

    // Retrieve the title from the temporary attribute 
    var title = $(this).attr("tmp_title"); 

    // Return the title to what it was 
    $(this).attr("title", title); 
    }); 


    //Restore the title on click 
    $(".collection-box a").click(function(){ 

    // Retrieve the title from the temporary attribute 
    var title = $(this).attr("tmp_title"); 

    // Return the title to what it was 
    $(this).attr("title", title); 
    }); 
-1

Aquí es una buena solución, por nombrar un nuevo atributo decir 'fancytitle' en lugar del 'título' habitual como esto

<a href='#' customtitle='visit google' id='demo'> Visit Google Search </a> 

y recoger valor del atributo con jquery en mouseenter/hover como este

$('a#demo').attr('fancytitle') 
+0

Los atributos personalizados no estándar deben ir precedidos de "datos-". – cpburnz

9

Esto funciona.

$(document).ready(function(){ 
 
     $("a") 
 
     \t .mouseenter(function() { \t 
 
     \t \t var title = $(this).attr("title"); 
 
     \t \t $(this).attr("tmp_title", title); 
 
     \t \t $(this).attr("title",""); 
 
     \t }) 
 
     \t .mouseleave(function() { 
 
     \t \t var title = $(this).attr("tmp_title"); 
 
     \t \t $(this).attr("title", title); 
 
     \t }) 
 
     \t .click(function() { \t 
 
     \t \t var title = $(this).attr("tmp_title"); 
 
     \t \t $(this).attr("title", title); 
 
     \t }); 
 
     }); 
 
     });

+0

¡Impresionante! Esto funciona para mí sin problema. –

+0

@DeeaB: Su bienvenida .. Me alegra ayudar ..^_^ –

+0

Esto también me funciona ... Gracias Ridwan – Gops

Cuestiones relacionadas