2010-05-07 19 views
10

Ich habe eine unbestellte (ul) HTML-Liste. Jedem li Element sind 1 oder mehr Klassen zugeordnet. Ich möchte durch diese ul Liste gehen und alle (distinct) Klassen bekommen. Dann erstellen Sie aus dieser Liste eine Liste von Kontrollkästchen, deren Wert mit dem der Klasse übereinstimmt und dessen Label dem der Klasse entspricht. Ein Kontrollkästchen für jede Klasse.Verwenden Sie jQuery, um eine Liste der Klassen zu erhalten

Was ist der beste Weg, dies mit jQuery zu tun?

+1

Was haben Sie bisher getan? – jweyrich

+0

nichts bisher. Habe gerade die Liste eingerichtet. Ich war mir nicht sicher, wo ich überhaupt anfangen sollte. – John

+0

mögliches Duplikat von [Klassenliste für Element mit jQuery holen] (http://stackoverflow.com/questions/1227286/get-class-list-for-element-with-jquery) – lebolo

Antwort

18

Try this:

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

Sie sollten überprüfen, ob 'this' das ist leere Zeichenfolge, bevor sie zur Liste hinzugefügt wird, falls in der Klassendeklaration zusätzliche Leerzeichen vorhanden sind. – Tgr

+0

@Tgr fertig, danke. – MDCore

+1

Sie müssen gegen '' ''überprüfen. Wenn du durch ein Leerzeichen teilst, bekommst du niemals ein Leerzeichen, aber 'a..b'.split ('.')' Gibt '[' a ',' ',' b '] ' – Tgr

3

i auch diese Funktionalität benötigt aber als Plugin, dachte ich, es zu teilen ...

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; 
} 
Verwandte Themen