2010-05-07 9 views
10

Tengo un (ul) Lista HTML no-ordenada. Cada elemento li tiene una o más clases asociadas. Quiero revisar esta lista de ul y obtener todas las clases (distintas). Luego, a partir de esta lista, cree una lista de casillas de verificación cuyo valor coincida con el de la clase y también cuya etiqueta coincida con la de la clase. Una casilla de verificación para cada clase.Uso jQuery para obtener una lista de las clases

¿Cuál es la mejor manera de hacer esto con jQuery?

+1

¿Qué has hecho hasta ahora? – jweyrich

+0

nada hasta el momento. Acabo de configurar la lista. No estaba seguro de por dónde empezar. – John

+0

posible duplicado de [Obtener lista de clase de elemento con jQuery] (http://stackoverflow.com/questions/1227286/get-class-list-for-element-with-jquery) – lebolo

Respuesta

18

Prueba esto:

// get the unique list of classnames 
classes = {}; 
$('#the_ul li').each(function() { 
    $($(this).attr('class').split(' ')).each(function() { 
     if (this !== '') { 
      classes[this] = this; 
     }  
    }); 
}); 

//build the classnames 
checkboxes = ''; 
for (class_name in classes) { 
    checkboxes += '<label for="'+class_name+'">'+class_name+'</label><input id="'+class_name+'" type="checkbox" value="'+class_name+'" />'; 
}; 

//profit! 
+1

Debe comprobar si 'this' es la cadena vacía antes de agregarla a la lista, en caso de que haya espacios adicionales en la declaración de clase. – Tgr

+0

@Tgr hecho, gracias. – MDCore

+1

Debe verificar contra ''''. Si se divide por un espacio, nunca obtendrá un espacio, pero ''a..b'.split ('. ')' Dará '[' a ',' ',' b ']' – Tgr

3

yo también necesitaba esta funcionalidad, sino como un plug-in, pensó que yo comparto ...

jQuery.fn.getClasses = function(){ 
    var ca = this.attr('class'); 
    var rval = []; 
    if(ca && ca.length && ca.split){ 
    ca = jQuery.trim(ca); /* strip leading and trailing spaces */ 
    ca = ca.replace(/\s+/g,' '); /* remove doube spaces */ 
    rval = ca.split(' '); 
    } 
    return rval; 
} 
Cuestiones relacionadas