通过父母的Jquery选择器?

时间:2012-08-12 12:48:53

标签: jquery jquery-selectors

我有这个简单的表(嵌套)

 <table border="1px">
            <tr>
                <th>kkkk</th>
                <th>mmmm</th>
            </tr>
            <tr>
                <td>a</td>
                <td>a</td>
            </tr>
            <tr>
                <td>a</td>
                <td>a</td>
            </tr>
            <tr>
                <td>a</td>
                <td>
                  <table border="1px" style="margin:10px">
                        <tr>
                            <th>xxxx</th>
                          <th style="background-color:yellow">yyyy</th>
                        </tr>
                        <tr>
                            <td>a</td>
                            <td>a</td>
                        </tr>
                        <tr>
                            <td>a</td>
                            <td>a</td>
                        </tr>
                        <tr>
                          <td >a</td>
                            <td  style="background-color:red;" class="theTd">a</td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>

enter image description here

(这里没有任何表ID)

我想点击red区域,找到yellow值中的

我没有获得TH索引的问题。

问题在于我只想通过Parents()方法执行此操作 - 红色框看到 2 parents TR's,其中TH .... xxx,yyy行和kkk,mmm行...

类似的东西:

  alert( $(".theTd").parents("first tr  parent which contains th's").....);

正确的Selector语法是什么?

http://jsbin.com/udohum/1/edit

修改

我不想要普通的父()。parent()....因为.theTd可以在其中包含一个包装器Div等... - 所以父母这将是DIV。 (这会伤害逻辑......)

3 个答案:

答案 0 :(得分:0)

这样的事情怎么样?

$('.theTd').click(function(){
    alert($(this).parent().parent().find('tr > th:nth-child(2)').html());
});

(参见此处:http://jsfiddle.net/Te3QB/1/

更新:使用.closest()选择器可能会更好:

$('.theTd').click(function(){
    alert($(this).closest('table').find('tr > th:nth-child(2)').html());
});
  

.closest()获取与选择器匹配的第一个元素,从当前元素开始并逐步向上遍历DOM树。

答案 1 :(得分:0)

parents()选择所选元素的所有父级,您可以使用parentsUntil代替:

$(".theTd").parentsUntil('table').find('th[style^=background]')

jsBin

closest()方法:

$(".theTd").closest('table').find('tr:has("th")').foo()

答案 2 :(得分:0)

要获得tr,请尝试以下方法:

$(".theTd").closest("table").find("tr");

这有点混乱。我们需要nth-child,为此我们需要索引:

$(this).closest('table').find('tr th:nth-child('+ ($(this).index()+1) +')');