我正在尝试在此处捕获父级的id
属性,并返回undefined
<table>
<tr id="1343">
<td><span class="hi">Hi</span></td>
</tr>
</table>
使用Javascript:
var $id = $(".hi").parent("tr").attr("id");
alert($id);
我以为我正在使用它,但我想不是,有人知道为什么它不会给我我想要的价值?
这是一个小提琴: http://jsfiddle.net/AsDY6/
答案 0 :(得分:3)
您可以在行选择器上使用parents
代替parent
。
var $id = $(".hi").parents("tr").attr("id");
正如其他人所指出的closest
也会奏效。区别在于parents
将获得与选择器匹配的所有父元素。因此,如果您有嵌套表,则可能需要使用closest
,因为parents
将获得所有父表行。如果我知道DOM将始终只有一个父匹配选择器,出于性能原因,我倾向于选择parents
,因为parents
根据this one等性能测试更快。
这是一个更新的fiddle。
答案 1 :(得分:3)
.parent()
返回直接父级,在本例中为td
使用最近的。 $id = $(".hi").closest("tr").attr("id");
答案 2 :(得分:1)
尝试使用.closest('tr')
或.parents('tr')
代替.parent('tr');
。
.parent()
只会上升一个级别,而.closest()
将继续爬上DOM,直到找到匹配项,.parents()
将搜索到根祖先。 (您也可以将.first()
链接到.parents()
(例如.parents().first()
),以便它只返回第一个匹配项。)
有关不同方法的详细信息,请参阅Difference between jQuery parent(), parents() and closest() functions。并在三个建议的答案之间查看这些performance comparisons。
答案 3 :(得分:1)
更改
var $id = $(".hi").parent("tr").attr("id");
TOO
var $id = $(".hi").parents("tr").first().attr("id");
OR
var $id = $(".hi").closest("tr").attr("id");
答案很简单。标记<tr>
不是.hi
的父级。 .hi
的父级实际上是它所在的<td>
。因此,您可以使用.parents
。但是,这可能会占用太多,所以如果您只希望第一个父级符合该描述,请确保使用.first之类的内容。
OR
使用jQuery的.closest方法,该方法与.parents('selector').first()
答案 4 :(得分:-1)
父母的参考父母
使用此代码:
var $id = $(".hi").parent().parent().attr("id");
这是工作!
答案 5 :(得分:-2)
var $id = $(".hi").parent("td").parent('tr').attr("id");
alert($id);