2011-10-28 44 views
3

我正在使用jQuery来遍历文档中的某些元素。这些元素的类型为<tr>,类别为.input-row。某些元素也可以有一个辅助类(例如.input-area)。jQuery:获得“二级”类

我使用$(".input-row").each()循环遍历元素,但是如何确定$(this)元素是否具有“辅助”类,如果是,请获取此名称?

+0

使用分割。请参阅:http://stackoverflow.com/questions/4239947/jquery-get-second-class-name –

+0

如果您需要*检查*元素的类,你可能会做错什么。现在'class'不再是用来存储数据的 - 它有'data-whatever'(通过jQuery'.data('whatever')')。如果你已经需要这个类来应用格式化,那么使用'hasClass()'检查是绝对正确的。 – ThiefMaster

回答

4
$(".input-row").each(function(){ 
    $.each($(this).attr('class').split(/\s+/), function(i, v){ 
    if(v !== 'input-row'){ 
     alert(v); 
    } 
    }); 
}); 
+2

问题问“如何确定$(this)-element是否具有”次要“类,如果是,请获取这个”...“的名称你的例子意味着你已经知道类的名字 –

+0

我编辑了代码,我认为它会做你想要的。 – michaeljdennis

1

可以使用attr得到所有类的列表,你可以简单地摆脱类的你来选择的元素:

$(".input-row").each(function() { 
    var allClasses = $(this).attr("class"), 
     otherClasses = allClasses.replace("input-row", ""); 
}); 

如果元素有两个以上的班,那么你将留下其他类的列表。要将它们分开,您可以在空格中使用split

+1

'$(this).attr(“class”)'相当于'this.className'。 – Tomalak

1

您可以获取元素上的所有类,然后删除您知道存在的类('input-row'),然后您将在该元素上留下任何其他类。

$('.input-row').each(function() { 
    var classes = $.trim($(this).attr('class').replace('input-row', '')); 
    if (classes.length > 1) { 
     alert(classes) // Names of all of the remaining classes 
    } 
} 

如果您想单独获取它们,可以使用classes.split('')来获取数组。

0

我更喜欢声明式的方法。你知道哪些类可以有,所以对他们写的情况:

$(".input-row").each(function() { 
    var myClasses = this.className.split(" "); 
    $.each(myClasses, function (i, className) { 
    if (className != 'input-row') { 
     alert(className); 
    } 
    }); 
}); 

$(".input-row.input-area").each(/* ... */); 
$(".input-row.input-field").each(/* ... */); 

如果您由于某种原因不知道类的名字,你可以沿着线提取它

0

你也可以做这样的事情来检测类的数量:

var nc = $('#myId').attr('class').split(' ').length; 

那么如果nc大于1:

$('#myID').attr('class').split(' ')[1] 

应该返回 '次要' 类

a fiddle

+0

如果该元素没有第二类,该怎么办? –

+0

这就是为什么我会事先检查课程的数量,但你说得对:也许这需要一点澄清。 – m90

0

我会去这个

var otherClasses = $('.input-row').attr('class').split(' '); 
otherClasses.splice($.inArray("input-row", otherClasses),1); 

简单地做这

var otherClasses = $('.input-row').attr('class').replace('input-row', '').split(' '); 

由于“输入行”后面的空格,会给你一个额外的字符串,其中有一个空的值。