2011-09-28 15 views
11

estado en este desde hace un tiempo. Básicamente, necesito verificar dónde está vacío un href en una etiqueta de anclaje con la clase .pdf-download, y si lo está, ocultarlo.JQuery: ocultar el anclaje si href está vacío

He intentado algunas opciones pero sin suerte. Esto es lo que tengo hasta ahora:

$("a.pdf-download").each(function (i) { 
    if ($('[href]:empty',this).length == 1) { 
    $(this).hide(); 
    } else { 
    $(this).show(); 
    } 
}); 
+3

Hola Guy - Veo que ha pedido a tres preguntas y recibió algunas buenas respuestas. Asegúrese de marcar una respuesta como correcta marcando la marca de verificación junto a la mejor respuesta. Así es como funciona la comunidad SO. También es posible que desee leer las preguntas frecuentes - http://stackoverflow.com/faq – mrtsherman

Respuesta

19
if ($(this).attr('href') != '') { 
    $(this).hide(); 
} else { 
    $(this).show(); 
} 

Tenga en cuenta que también se puede hacer esto en CSS con attribute selectors:

a.pdf-download[href='']{ 
    display:none; 
} 

Este no es compatible con IE6 sin embargo.

+5

+1 - Me gusta la solución CSS. Puedes usar ese mismo selector en jQuery si quieres también. '$ ('a [href =" "]'). hide();' – mrtsherman

+0

Tenga en cuenta que ese selector jQuery no ocultará una etiqueta de enlace sin ningún atributo href. –

3

¿Funcionaría algo así?

$("a.pdf-download").each(function (i) { 
    if ($(this).attr('href').length == 0) { 
    $(this).hide(); 
    } else { 
    $(this).show(); 
    } 
}); 
+0

Esto funciona si href está configurado en el elemento, pero si no lo está arrojará un error. Si intenta '$ (' prueba') .attr ('href'). Length' devolverá" TypeError: no se puede leer la propiedad 'length' de undefined "como' .attr ('href') 'returns' undefined '. Me imagino que en la mayoría de los casos este método funcionará bien, pero vale la pena señalar esta advertencia. – andyface

4

Utilice esta solución. también producirá los resultados deseados cuando el atributo href no está definido. Si usa un selector de CSS (JQuery), no se detectarán los atributos href inexistentes.

$("a.pdf-download").each(function (i) { 
    if (!this.href) { 
     $(this).hide(); 
    } else { 
     $(this).show(); 
    } 
}) 

No es necesario el uso de un método jQuery para conseguir el atributo href, porque this.href es tan fácil de leer, más rápido y también apoyada universalmente.

0

Soy un jQuery principiante a mí mismo, pero esa es la forma en que lo haría:

$("a.pdf-download").each(function (i) { 

    var aHref = $(this).attr('href'); 

    if (aHref == '' || !aHref) { 

     $(this).hide(); 

    }; 

}); 

Demostración: http://jsfiddle.net/BZq9c/1/

6

También puede hacer esto con un selector jQuery, de la siguiente manera:

// Hide any links with blank href or no href attribute 
$('a.pdf-download[href=], a.pdf-download:not([href])').hide(); 
1
$("a.pdf-download").each(function() { 
    var href = $(this).attr("href"); 
    if(href == '') { 
     $(this).remove(); 
    } 
}); 

o

$("a.pdf-download[href='']").remove() 
Cuestiones relacionadas