2010-09-22 6 views
7

Ich habe ein paar Divs, die mit PHP erstellt werden. Der Anker im div hat immer einen HREF, auch wenn er leer ist. Im Grunde versuche ich zu erkennen, ob der HREF leer ist. Wenn es Inhalt hat, nichts tun, wenn es leer ist, wird der Text Streifen aus, löschen Sie den Anker, legte sie den Text auf der RückseiteWie überprüfe ich nach leerem attr() in jquery?

Hier ist die div.

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

Hier mein Code:

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

wo Artikel im html meinen Fehler ich sehe es – mcgrailm

Antwort

15

Sie können für eine leere überprüfen href Attribut und "auspacken" diese Links .replaceWith() wie folgt aus:

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

You can give it a try here.

+2

dammit nick 8 ^) – mcgrailm

+0

Ich mag, wie dies – mcgrailm

+0

die Notwendigkeit für eine bedingte Verzweigung entfernt Es funktioniert in Ihr Link, aber wenn ich es in meinen Code einfüge, bekomme ich einen 'Uncaught SyntaxError: Unerwartetes Token ILLEGAL' – Jared

12

Sie können einfach testen das Attribut als boolean statt es gegen undefined Prüfung:

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

'this.href' ist viel einfacher;) –

+1

überprüft das nicht nur, ob es ein href attr() gibt, nicht, wenn es leer ist? – Jared

+2

@Nick Manchmal vergesse ich, dass es dieses archaische "JavaScript" Ding gibt, das unter jQuery sitzt: p – meagar

1

einfach um den 'href' -Attribut loszuwerden:

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

Für mehrere Targeting, für Beispiel das 'style' Attribut:

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

Auf diese Weise erhalten Sie nur Löschen Sie das Attribut, wenn es leer ist, anstatt das gesamte Element selbst zu löschen.

Ein vollständiges Codebeispiel wäre:

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