2010-01-13 16 views
14

Quiero eliminar el atributo de clase de todos los elementos que tienen un atributo de clase vacío.Comprobando si el atributo de clase está vacío y luego quitándolo si es verdadero con jQuery

Ej:

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

convierte

He estado jugando alrededor de las edades tratando de trabajar hacia fuera! Lo más cerca que me dieron fue

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

Pero no cigarro. Sé que va a ser desesperadamente simple, ¡pero ninguna cantidad de Google me ha enseñado la luz! Aclamaciones.

EDIT: Como la gente ha preguntado por qué quiero eliminarlo, aquí está todo el guión:

$(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>'); 
}); 

La razón no es una clase vacía es porque yo estoy añadiendo la clase 'right_col' y luego la eliminación más tarde. No sé si van a haber otras clases o no, por eso tuve que comprobar si el atributo está vacío. ¡Gracias por la ayuda hasta ahora!

+2

Quizás sería útil decirnos * por qué * está intentando eliminar el atributo? – cdeszaq

+0

Cdeszaq tiene razón, la pregunta está redactada de tal manera que nos hace preguntarnos si hay una mejor manera de abordar el problema. Sin saber el problema, no podemos responder eso. –

+1

Agregó el guión completo para su referencia, ¡gracias! – Glo

Respuesta

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

Una hermosa línea de código. Muchas gracias. –

0

Después de que se haya analizado el documento y se haya creado el árbol DOM, los atributos del elemento son solo propiedades de los objetos DOM individuales, así que mientras se elimine el atributo de la fuente, seguirá presente (pero vacío) en cada objeto en el DOM.

+0

Sí, me has hecho darme cuenta de que el jquery extra es algo sin sentido, los milisegundos adicionales agregados a la carga de la página no valen la pena para eliminar realmente el atributo. Oh, bueno, lo siento por la pregunta sin sentido al final: S – Glo

+0

No tiene sentido, acabo de tener la misma pregunta. – CurtainDog

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

Usted realmente no necesita ninguna biblioteca (como jQuery) hacen a esta:

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

Adición/eliminación de clases es una función básica de la biblioteca jQuery: http://docs.jquery.com/Attributes

Puede ver si cualquier colección de elementos dada tiene la clase en cuestión con hasClass (http://docs.jquery.com/Attributes/hasClass#class)

Y luego eliminar una clase específica con removeClass (http://docs.jquery.com/Attributes/removeClass#class)

lo tanto, si usted necesita para eliminar la clase "abc" de un elemento específico hacer:

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

Esto eliminará sólo la clase indicada, incluso si hay otros allí. Agregar una clase funciona de la misma manera.

+0

Es el atributo de clase que quería eliminar, no solo una clase y solo si no hay clases. – Glo

+0

¿Pero por qué? Un atributo de clase vacío no hace nada de una manera u otra. – cdeszaq

+1

Cleaner html Supongo que, en realidad, no importa, ¡pero al menos lo sé para referencia futura! – Glo

2

Estoy de acuerdo, es muy extraño que removeClass deje un atributo de clase vacío dando vueltas. Esperaría que después de addClass, removeClass devolvería el DOM a su estado original.

Lo que he terminado haciendo es:

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

que debe ser muy performante.

(Mi código es para un editor HTML, por lo que es importante que el código producido sea lo más limpio posible.)

Cuestiones relacionadas