1

我试图在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/

4

6 回答 6

3

您可以在行选择器上使用parents而不是。parent

var $id = $(".hi").parents("tr").attr("id");

正如其他人所指出的那样,closest也将起作用。不同之处在于parents它将获取与选择器匹配的所有父元素。因此,如果您有嵌套表,您可能会想要使用closest,因为parents会获取所有父表行。parents如果我知道 DOM 总是只有一个匹配选择器的父级,出于性能原因,我倾向于更喜欢,因为parents根据像这样的性能测试它更快。

这是一个更新的小提琴

于 2013-05-07T15:56:50.160 回答
3

.parent()返回直接父级,在这种情况下是 td

改用最接近的。 $id = $(".hi").closest("tr").attr("id");

于 2013-05-07T15:57:14.093 回答
1

尝试.closest('tr').parents('tr')代替.parent('tr');.

.parent()只会上升一级,而.closest()会继续向上爬上 DOM,直到找到匹配项并.parents()搜索到根祖先。(您也可以链接.first().parents()(例如,.parents().first()),以便它只返回第一个匹配项。)

有关不同方法的更多信息,请参阅jQuery parent()、parents() 和最接近 () 函数之间的区别。并查看三个建议答案之间的这些性能比较。

于 2013-05-07T15:56:46.847 回答
1

改变

var $id = $(".hi").parent("tr").attr("id");

var $id = $(".hi").parents("tr").first().attr("id");

或者

var $id = $(".hi").closest("tr").attr("id");

为什么

答案很简单。标签<tr>不是.hi. .hi的父母实际上是<td>它所在的地方。因此您可以.parents改用。但是,这可能会占用太多,因此如果您只希望 First 父级适合该描述,请确保使用类似.first的内容。

或者

使用 jQuery 的.closest方法,该方法应该与.parents('selector').first()

于 2013-05-07T15:58:19.447 回答
-1

父母的参考父母

使用此代码:

var $id = $(".hi").parent().parent().attr("id");

这是工作!

于 2013-05-07T16:01:28.457 回答
-2
   var $id = $(".hi").parent("td").parent('tr').attr("id");
  alert($id); 
于 2013-05-07T15:57:14.223 回答