无法捕获父对象

时间:2013-05-07 15:55:10

标签: jquery

我正在尝试在此处捕获父级的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/

6 个答案:

答案 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");

WHY

答案很简单。标记<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);