2010-05-07 14 views
10

Ho un elenco HTML non ordinato (ul). Ad ogni articolo li sono associate 1 o più classi. Voglio passare attraverso questo elenco ul e ottenere tutte le classi (distinte). Quindi da questo elenco crea un elenco di checkbox il cui valore corrisponde a quello della classe e anche la cui etichetta corrisponde a quella della classe. Una casella di controllo per ogni classe.Utilizzare jQuery per ottenere un elenco di classi

Qual è il modo migliore per farlo utilizzando jQuery?

+1

Cosa hai fatto finora? – jweyrich

+0

finora nulla. Ho appena creato la lista. Non ero nemmeno sicuro da dove cominciare. – John

+0

possibile duplicato di [Ottieni elenco classi per elemento con jQuery] (http://stackoverflow.com/questions/1227286/get-class-list-for-element-with-jquery) – lebolo

risposta

18

Prova questo:

// 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

È necessario verificare se "questo" è il stringa vuota prima di aggiungerla alla lista, nel caso ci siano spazi extra nella dichiarazione della classe. – Tgr

+0

@ Fine, grazie. – MDCore

+1

Devi controllare contro ''''. Se dividi per uno spazio, non otterrai mai uno spazio, ma "'a..b'.split ('. ')' Darà '[' a ',' ',' b ']' – Tgr

3

ho anche bisogno di questa funzionalità, ma come un plugin, pensava che io condivido ...

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; 
} 
Problemi correlati