2010-01-13 10 views
14

Ich möchte das Klassenattribut von allen Elementen entfernen, die ein leeres Klassenattribut haben.Überprüfen, ob das Klassenattribut leer ist und dann entfernen, wenn es wahr ist mit jQuery

ZB:

`<li class="">One</li>` 

wird

Ich habe seit Ewigkeiten über bisher durcheinander versucht, es zu trainieren! Der nächste, den ich bekam, war

var len = $(".splitcolcontainer ul li[class]").val().length; 
if (len == 0) 
    { 
    $('.splitcolcontainer ul li').removeAttr("class"); 
    } 

Aber keine Zigarre. Ich weiß, dass es verzweifelt einfach sein wird, aber keine Menge Googeln hat mir das Licht gezeigt! Prost.

EDIT: Da die Menschen gefragt, warum ich will, es zu entfernen, ist hier das ganze Skript:

$(document).ready(function() { 
    $('.splitcolcontainer ol, .splitcolcontainer ul').each(function() { 
      if($(this).is("ol")) { var ordered = true; } 
      var colsize = Math.round($(this).find("li").size()/2); 
      $(this).find("li").each(function(i) { 
       if (i>=colsize) { 
        $(this).addClass('right_col'); 
       } 
      }); 
      if(ordered) { 
       $(this).find('.right_col').insertAfter(this).wrapAll("<ol class='splitcol' start='" + (colsize+1) + "'></ol>").removeClass("right_col"); 

      } else { 
       $(this).find('.right_col').insertAfter(this).wrapAll("<ul class='splitcol'></ul>").removeClass("right_col");    
      } 

    }); 


    $('.splitcolcontainer').after('<div class="clear">&#160;</div>'); 
    $('.splitcolcontainer ul, .splitcolcontainer ol').wrap('<div></div>'); 
}); 

Der Grund gibt es eine leere Klasse ist, weil ich die Klasse ‚right_col‘ ich das Hinzufügen und dann Entfernen es später. Ich weiß nicht, ob es andere Klassen geben wird oder nicht, deshalb musste ich prüfen, ob das Attribut leer ist. Danke für die Hilfe bis jetzt!

+2

Vielleicht wäre es nützlich, uns zu sagen * warum * Sie versuchen, das Attribut zu entfernen? – cdeszaq

+0

Cdeszaq hat Recht, die Frage ist so formuliert, dass wir uns fragen, ob es einen besseren Weg gibt, das Problem anzugehen. Ohne das Problem zu kennen, können wir das nicht beantworten. –

+1

Hinzugefügt das ganze Skript für Ihre Referenz, danke! – Glo

Antwort

17
$('*[class=""]').removeAttr('class'); 
+0

Eine schöne Codezeile. Vielen Dank. –

0

Nachdem das Dokument analysiert wurde und der DOM-Baum erstellt wurde, sind die Attribute des Elements in Wirklichkeit nur Eigenschaften der einzelnen DOM-Objekte. Sie können das Attribut zwar aus der Quelle entfernen, es ist jedoch weiterhin vorhanden (aber leer)) für jedes Objekt im DOM.

+0

Ja, Sie haben mir klar gemacht, dass die Extra-Jquery sinnlos ist, die zusätzlichen Millisekunden, die zum Pagenload hinzugefügt werden, sind es nicht wert, das Attribut wirklich zu entfernen. Oh, tschuldigung für die sinnlose Frage am Ende: S – Glo

+0

Es ist nicht sinnlos, ich hatte gerade die gleiche Frage. – CurtainDog

1
$('li[class=""]').each(function() { 
    this.removeAttribute('class'); 
}); 
1

Sie brauchen nicht wirklich keine Bibliotheken (wie jQuery) tun dies:

if (element.className == "") 
    element.removeAttribute('class'); 
0

Hinzufügen/Entfernen von Klassen ist eine Kernfunktion der jQuery-Bibliothek: http://docs.jquery.com/Attributes

Sie können sehen, ob eine bestimmte Sammlung von Elementen die betreffende Klasse mit hasClass (http://docs.jquery.com/Attributes/hasClass#class)

hat

Und dann eine bestimmte Klasse mit removeClass (http://docs.jquery.com/Attributes/removeClass#class)

So entfernen, wenn Sie Klasse „abc“ aus einem bestimmten Elemente tun müssen, um entfernen:

$("#element").removeClass("abc"); 

Dies entfernt nur die angegebene Klasse, auch wenn da noch andere sind. Das Hinzufügen einer Klasse funktioniert auf die gleiche Weise.

+0

Es ist das Klassenattribut, das ich entfernen wollte, nicht nur eine Klasse und nur, wenn es keine Klassen gibt. – Glo

+0

Aber warum? Ein leeres Klassenattribut tut auf die eine oder andere Weise nichts. – cdeszaq

+1

Cleaner html Ich denke, es ist nicht wirklich wichtig, aber zumindest weiß ich für zukünftige Referenz! – Glo

2

Ich stimme zu, es ist sehr seltsam, dass removeClass ein leeres Klassenattribut rumhängt. Ich würde erwarten, dass nach einer addClass, removeClass das DOM in seinen ursprünglichen Zustand zurückkehren würde.

Was ich tun gelandet ist:

$(this).removeClass("my-class").filter('[class=""]').removeAttr('class'); 

die recht performant sein sollte.

(Mein Code ist für einen HTML-Editor, daher ist es wichtig, dass der Code so sauber wie möglich ist.)

Verwandte Themen