我有一个像这样的列表框
<div class="selectdiv">
<select class="mainclass" id="subcat">
<option>Select Category</option>
<option class="class1" value="val1" >VAL1 </option>
<option class="class1" value="val2" >VAL2</option>
<option class="class2" value="val3" >VAL3</option>
<option class="class2" value="val4" >VAL4</option>
<option class="class2" value="val5" >VAL5</option>
<option class="class3" value="val7" >VAL6</option>
<option class="class3" value="val8" >VAL7</option>
</select>
</div>
我想得到它所有子元素的类名(class1,class2,class3)......如果我能得到所有不同的名字会更好。到目前为止,我已尝试过以下内容
$('#subcat').children('option')
$('#subcat option').attr('className')
在第一个它给我列表中包含其他参数以及类名但它在第二个中返回undefined。
答案 0 :(得分:2)
如果子元素可以有多个类
var obj = {};
$('#subcat').children().each(function () {
$.each((this.className || '').split(/\s+/), function (i, v) {
obj[v] = true;
})
})
var classes = $.map(obj, function (val, key) {
return key == '' ? undefined : key;
})
console.log(classes)
演示:Fiddle
答案 1 :(得分:1)
您可以遍历元素并将不同的类名放在某个数组中。
<强> Live Demo 强>
var classList = [];
$('#subcat option').each(function () {
if (this.className != "" && classList.indexOf(this.className) == -1)
classList.push(this.className);
});
答案 2 :(得分:0)
看看你是否想要数组中的所有类,然后使用:
var cls = [];
$('#subcat').find('option').each(function(){
cls.push(this.className);
});
这将输出所有类名。
如果你想要只有class2
的不同类名:那么:
var cls = [];
$('#subcat').find('option[class$="2"]').each(function(){
cls.push(this.className);
});
这将输出所有以2
结尾的类名。
或者如果你想获得除class2
之外的所有类名,那么:
var cls = [];
$('#subcat').find('option:not([class$="2"])').each(function(){
cls.push(this.className);
});
这将循环遍历每个元素,除了以2
结尾的类名,并在此处推送所有类名。