2010-05-07 48 views
10

我有一個沒有排序的(ul)HTML列表。每個li物品都有一個或多個類別附加到它。 我想通過這個ul列表並獲得所有(不同)的類。然後從這個列表中創建一個複選框列表,其值與該類的值匹配,並且其標籤與該類的標籤相匹配。每個班級一個複選框。使用jQuery獲取類的列表

使用jQuery做這件事的最好方法是什麼?

+1

你有什麼迄今所做? – jweyrich 2010-05-07 09:03:55

+0

目前沒有。剛剛建立了清單。我不確定從哪裏開始。 – John 2010-05-07 09:27:26

+0

[獲取jQuery元素類列表]的可能重複(http://stackoverflow.com/questions/1227286/get-class-list-for-element-with-jquery) – lebolo 2014-03-24 15:52:30

回答

18

試試這個:

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

你應該檢查'this'是否是在將其添加到列表之前爲空字符串,以防在類聲明中有額外的空格。 – Tgr 2010-05-07 09:16:40

+0

@Tgr完成,謝謝。 – MDCore 2010-05-07 09:22:34

+1

你需要檢查''''。如果你按空格分隔,你永遠不會得到一個空格,但''a..b'.split('。')'會給出'['a','','b']' – Tgr 2010-05-08 20:48:00

3

我也需要此功能,但作爲一個插件,以爲我分享......

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