我有以下代码:
JS:
var test2 = ['RMrpi5Z8doc','JIPbUaqyYx0','MbjXYg0YRmw'];
$('tr').live('click', function(event){
$($(this).attr('class').split(' ')).each(function() {
if (!((this == 'even') || (this == 'odd'))) {
alert(jQuery.inArray(this, test2));
if (this == 'RMrpi5Z8doc') {
alert(this);
}
}
});
});
HTML:
<table>
<tr class="odd RMrpi5Z8doc">
<td>Kite</td>
<td>Just Like Vinyl</td>
<td>Audiotree</td>
</tr>
</table>
inArray不匹配并返回-1。与文字字符串匹配的if语句匹配。如果我在inArray的文字中替换,那也匹配。
我看过一篇帖子,说jQuery attr不再返回字符串,但是查看jQuery网站上attr的文档似乎就是这样说的。
也许我应该以完全不同的方式来解决这个问题?
答案 0 :(得分:5)
你使用了错误的each
。你的意思是jQuery.each
,通用迭代器:
$.each($(this).attr('class').split(' '), function ...);
不是each
,jQuery实例上的实例函数:
$($(this).attr('class').split(' ')).each(function ...); // Wrong
特别是,正在发生的事情是上述部分:
$($(this).attr('class').split(' '))
...使用数组调用$()
,这不符合您的要求。 : - )
答案 1 :(得分:1)
我使用以下方法重构了这个:
$(document).on('click', 'tr', function(){
alert(jQuery.inArray($(this).attr('id'), test2));
}
这似乎有效。我已将类名移动到id字段,因为我没有将这些标识符用于任何样式表,它们确实是ID。
答案 2 :(得分:0)
这确实是一种类型不匹配。如果切换到if (this === 'RMrpi5Z8doc') {
,则第二个警报将不再触发。使用this.toString()
将解决此问题,如下所示:
$.each($(this).attr('class').split(' '), function() {
//...etc.
顺便说一下,这是一种不寻常的方式。通常,您将使用hasClass
方法测试类:
$('tr').on('click', function() {
if ($(this).hasClass('odd')) {
//...
另外,正如raina77ow所说,有:even
和:odd
伪类:
$('tr').on('click', function() {
if ($(this).is(':odd')) {
//...
这样,您可以完全取消odd
和even
个课程。