多级使用jQuery .parent()。eq(n)dosn&t。工作

时间:2014-04-01 14:19:07

标签: jquery

我读到.parent()。parent()。 ... sholud被替换为.parent()。eq(n),而n是关卡。 看看demo,。parent()。parent()不等于.parent()。eq(1)

HTML

    <table id="Manager_tblPages" class="Manager_tblPages">
    <tbody>
         <tr class="Manager_trResultHeader">
            <td class="td1">
                <span class="Manager_cbxCheckAll">
                    <input id="cphBody_cphBody_Manager_cbxCheckAll" type="checkbox" name="ctl00$ctl00$cphBody$cphBody$Manager_cbxCheckAll"></input>
                </span>
            </td>
        </tr>
    </tbody>
</table>

JS

$('.Manager_cbxCheckAll input').change(function () {
    alert($(this).parent().attr('class'));
    alert($(this).parent().eq(0).attr('class'));
    alert($(this).parent().parent().attr('class'));
    alert($(this).parent().eq(1).attr('class'));
});

jsfiddle Demo

有什么建议吗?

5 个答案:

答案 0 :(得分:1)

您需要使用.parents(),因为.parent()只返回一个元素。

$('.Manager_cbxCheckAll input').change(function () {
    console.log($(this).parents().attr('class'));
    console.log($(this).parents().eq(0).attr('class'));
    console.log($(this).parent().parent().attr('class'));
    console.log($(this).parents().eq(1).attr('class'));
});

演示:Fiddle


但最好使用.closest()

来定位这些元素
$(this).closest('span').attr('class')
$(this).closest('td').attr('class')

演示:Fiddle

答案 1 :(得分:1)

.parent()会返回包含当前所选元素的单个元素,因此使用.eq()毫无意义。

您可能希望使用.parents(),因为它会返回父元素的所有.eq()应该按预期工作。

Updated Fiddle using parents()

答案 2 :(得分:1)

您应该使用.parents()代替.parent()

来自文档:

The .parents() and .parent() methods are similar, except that the latter only travels a
single level up the DOM tree. Also, $( "html" ).parent() method returns a set containing 
document whereas $( "html" ).parents() returns an empty set.

试试这个:

$('.Manager_cbxCheckAll input').change(function () {
        alert($(this).parent().attr('class'));
        alert($(this).parents().eq(0).attr('class'));
        alert($(this).parent().parent().attr('class'));
        alert($(this).parents().eq(1).attr('class'));
    });

<强> DEMO

答案 3 :(得分:1)

使用.parents()代替.parent()

 $('.Manager_cbxCheckAll input').change(function () {
   console.log($(this).parent().attr('class'));
   console.log($(this).parents().eq(0).attr('class'));
   console.log($(this).parent().parent().attr('class'));
   console.log($(this).parents().eq(1).attr('class'));
});

<强> Working Demo

答案 4 :(得分:0)

您可以使用.parents()代替.parent()

console.log($(this).parents().eq(1).attr('class'));

然而,您可以使用 .closest() 代替多个.parent().parents().eq()

  

对于集合中的每个元素,获取与之匹配的第一个元素   选择器通过测试元素本身并遍历其中   DOM树中的祖先。

$('.Manager_cbxCheckAll input').change(function () {
    alert($(this).parent().attr('class'));
    alert($(this).closest('span').attr('class'));
    alert($(this).parent().parent().attr('class'));
    alert($(this).closest('td').attr('class'));
});

<强> Updated Fiddle