2010-03-08 94 views
1
<table width="600px" id='testTable'> 
     <tr class="red"><td>this</td></tr> 
     <tr><td>1</td></tr> 
     <tr><td>1</td></tr> 
     <tr><td>1</td></tr> 
     <tr class="red"><td>1</td></tr> 
     <tr><td>1</td></tr> 
     <tr><td>1</td></tr> 
     <tr class="red"><td>this</td></tr> 
     <tr><td>1</td></tr> 
     <tr><td>1</td></tr> 
     <tr class="red"><td>1</td></tr> 
     <tr><td>1</td></tr> 
     <tr><td>1</td></tr> 
    </table> 


.gray 
{ 
    background-color:#dddddd; 
} 
.red 
{ 
    color:Red; 
} 

    $(function() { 
     $('#testTable tr.red:nth-child(odd)').addClass('gray'); 
     //this should select tr's with text=this, but its not happening 
    }); 

我想选择class = red但没有发生的表内的所有可能性。请帮助jquery中的第n个子选择器

+0

我不认为你用“this”标识的行是奇怪的。第一个标记为“this”的是奇数,而值为“1”的是奇数,而第二个标记为“this”的不是奇数。 – 2010-03-08 16:28:26

回答

3

第n个孩子(奇数)选择元素的没有选择返回集合的多名成员的多名成员。

您正在寻找这样的:

$('#testTable tr.red').filter(':even').addClass('gray'); 

编辑:其实你想要的甚至是那些,我想。这是一个基于0的索引。 Demo

+0

yaa,它工作 - thanx我正在寻找这样的东西。 – 2010-03-08 16:56:12

0

.red:nth-child(odd)的组合不符合您的想法。这两个部分中的每一个仅适用于tr元素,而不适用于彼此。因此,它不会首先查找所有红色元素,然后突出显示所有这些元素,它只会选择两个“条件”均为true的行。

有jQuery的一个解决方案,但 - 第一只选择了红色元素,并使用每个:

$(function() { 
    $('#testTable tr.red').each(function(i) { 
     if (i%2 == 1) 
      $(this).addClass('gray'); 
    }); 
}); 
+0

如果你将if(i%2 == 1)''改为'if(i%2 == 0)',这会起作用 - 他正在用text改变行:“this”。 – ghoppe 2010-03-08 16:45:43

+0

我打算做这样的事情,但ghoppe的答案解决了我的问题 – 2010-03-08 16:54:32

-2

你为什么不尝试的东西多一点长篇大论如

$(function() { 
    $('#testTable tr:nth-child(odd)').each(function() { 
     if($(this).hasClass('red')) { $(this).addClass('grey'); } 
    }); 
}); 

这应该做你想要的东西

+0

这不符合他的要求。看到他的评论:“这应该选择TR与文本=这,但它没有发生” – ghoppe 2010-03-08 16:44:16

+0

最后一行说明他希望在表中有一个红色的所有可能性,这就是这样做... 虽然我应该看起来更接近桌面标记。 – Anthony 2010-03-08 16:58:35