2010-09-22 14 views
7

Ho alcuni div che vengono creati utilizzando PHP. L'ancora all'interno del div ha sempre un HREF, anche se è vuoto. Fondamentalmente, sto cercando di scoprire se l'HREF è vuoto. Se si ha un contenuto, non fare nulla, se è vuoto, striscia il testo fuori, eliminare l'ancora, li misero il testo nelCome faccio a verificare la presenza di attr attr() in jquery?

Ecco il div:.

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

Ecco il mio codice:

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

dove è l'articolo nel codice HTML il mio errore vedo – mcgrailm

risposta

15

È possibile verificare la presenza di un attributo href vuota e "scartare" quei collegamenti utilizzando .replaceWith() come questo:

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

You can give it a try here.

+2

dannazione nick 8 ^) – mcgrailm

+0

Mi piace come questo elimina la necessità di un salto condizionato – mcgrailm

+0

Funziona in il tuo link, ma quando lo metto nel mio codice, ottengo un 'Uncaught SyntaxError: Unexpected token ILLEGAL' – Jared

12

Si può semplicemente provare l'attributo come un valore booleano invece di testare contro undefined:

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

'this.href' è molto più semplice;) –

+1

non controlla solo se c'è un href attr(), non se è vuoto? – Jared

+2

@Nick A volte mi dimentico che c'è questa cosa "JavaScript" arcaica che si trova sotto jQuery: p – meagar

1

Per semplicemente sbarazzarsi di l'attributo 'href':

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

Per il targeting multiple, per ad esempio l'attributo "stile":

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

In questo modo, si ottiene solo liberare l'attributo quando è vuoto invece di eliminare l'intero elemento stesso.

Un esempio di codice completo sarebbe:

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