我读到.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'));
});
有什么建议吗?
答案 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()
应该按预期工作。
答案 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 强>