2009-12-08 50 views
7
$(this).parents('table:first > tbody > tr') 

而且这两个选择器有什么区别?

$(this).parents('table:first').children('tbody').children('tr') 
+3

使用最接近而非父母&:第一个 – redsquare 2009-12-08 02:47:46

+1

@redsquare:我们不知道他实际上想要选择什么。 – SLaks 2009-12-08 02:48:40

+0

==父母('表:第一') – redsquare 2009-12-08 02:50:22

回答

13

不同的是,第一选择是完全在parents呼叫内,而第二个则不是。

因此,第一个查找匹配table:first > tbody > tr的所有父母this。 (换言之,含有trthis即在第一table

第二个将找到的this相匹配table:first母体,然后直接在tbody s表示母体的发现所有的tr S的。 (换句话说,所有的tr小号直接父表中的)

+3

似乎直观的反。我第一次读到第一个。我当然懒得去测试。 – ChaosPandion 2009-12-08 02:46:21

+0

@ChaosPandion:仔细阅读。你会明白我的意思。 – SLaks 2009-12-08 02:47:47

+0

+1 - 好的,我仔细看过,终于明白了。 – ChaosPandion 2009-12-08 02:54:27

4

也许一个例子可以帮助...开始了这个HTML

<table border=1> 
<thead> 
    <th>Outter Table</th> 
</thead> 
<tbody> 
    <tr><td>1</td></tr> 
    <tr> 
    <td> 
    <table border=1 width=100> 
    <thead> 
     <th>Inner Table</th> 
    </thead> 
    <tbody> 
     <tr><td>2a</td></tr> 
     <tr><td class="test">2b</td></tr> 
     <tr><td>2c</td></tr> 
    </tbody> 
    </table> 
    </td> 
    </tr> 
    <tr><td>3</td></tr> 
</tbody> 
</table> 

应用此脚本:

$('.test').parents('table:first > tbody > tr').addClass('foo'); 
$('.test').parents('table:first').children('tbody').children('tr').addClass('bar'); 

结果:

<table border="1"> 
<thead> 
    <th>Outter Table</th> 
</thead> 
<tbody> 
    <tr class="foo"><td>1</td></tr> 
    <tr class="foo"> 
    <td> 
    <table width="100" border="1"> 
    <thead> 
     <th>Inner Table</th> 
    </thead> 
    <tbody> 
     <tr class="bar"><td>2a</td></tr> 
     <tr class="bar"><td class="test">2b</td></tr> 
     <tr class="bar"><td>2c</td></tr> 
    </tbody> 
    </table> 
    </td> 
    </tr> 
    <tr class="foo"><td>3</td></tr> 
</tbody> 
</table> 
+0

这也不错! – user198729 2009-12-08 04:05:06