2010-09-22 12 views
7

Tengo algunos divs que se crean usando PHP. El delimitador dentro del div siempre tiene un HREF, incluso si está en blanco. Básicamente, estoy tratando de detectar si el HREF está en blanco. Si tiene contenido, no hacer nada, si es en blanco, pelar el texto en voz, elimine el ancla, ellos ponen el texto de nuevo en¿Cómo verifico attr() vacío en jquery?

Aquí es el div:.

<div class="title"> 
    <a class="article" href="">Lorem Ipsum</a> 
</div> 

Aquí está mi código:

jQuery(document).ready(function($) { //required for $ to work in Wordpress 

    $(".article").each(function(){ 
     if ($(this).attr('href') !== undefined) { 
      return; 
     } else { 
      var linkTitle = $(this).html(); 
      $(this).parent().empty().html(linkTitle); 
     }        
    });  
//--> 
}); 
+0

donde está el artículo en el html de mi error lo veo – mcgrailm

Respuesta

15

puede comprobar si hay un atributo href vacía y "desenvolver" los enlaces usando .replaceWith() así:

$(".article[href='']").replaceWith(function() { return this.innerHTML; }); 

You can give it a try here.

+2

maldita sea nick 8 ^) – mcgrailm

+0

me gusta la forma en que esto elimina la necesidad de un salto condicional – mcgrailm

+0

Funciona de su enlace, pero cuando lo puse en mi código, obtengo un 'Sincaught SyntaxError: Inexpected token ILEGAL' – Jared

12

Simplemente puede probar el atributo como un valor lógico en lugar de probar contra undefined:

if ($(this).attr('href')) { 
    // href is not blank 
} else { 
    // href is blank 
} 
+1

'this.href' es mucho más fácil;) –

+1

¿no es que solo comprueba si hay un href attr(), no si está en blanco? – Jared

+2

@Nick A veces olvido que hay una cosa arcaica de "JavaScript" debajo de jQuery: p – meagar

1

simplemente para deshacerse de la 'href' atributo:

$("#myLink[href='']").removeAttr('href'); 

para la orientación múltiple, por ejemplo, el atributo 'estilo':

$("#myDiv td, a, p, table, nav, header[style='']").removeAttr('style'); 

De esta manera, solo obtendrá deshacerse del atributo cuando está vacío en lugar de eliminar todo el elemento en sí.

Un ejemplo de código completo sería:

$('#myDiv table, tr, td, a, p').each(function() { 
if ($(this).attr('style') == '') { 
    $(this).removeAttr('style'); 
} 
}) 
Cuestiones relacionadas