我的html文件中有一个下面的代码,我想访问一个元素的父元素,比如下面代码中的表,它是td的父元素。为此,我使用了以下jquery语法,但它显示为"undefined“。有人能告诉我问题出在哪里吗?
<script type="text/javascript">
$(document).ready(function () {
alert($('td[id="4"]').parents().eq(1).attr("id"));
});
</script>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div class="ui-layout-center" id="center" runat="server">
<table id="Table1" >
<tr id="tr1">
<td id="3" class="cell" >
first cell
</td>
<td id="4" class="cell">
second cell
</td>
</tr>
</table>
<br />
<br />
</div>
</form>
</body>
</html>发布于 2012-04-13 23:20:27
首先,在加载DOM之前不能运行代码。这意味着您必须将其放在源文件中相关HTML之后,或者使用jQuery的方法等待DOM加载完成:
$(document).ready(function() {
alert($('td[id="4"]').parents().eq(0).attr("id"));
});然后,您的代码:
$('td[id="4"]').parents().eq(0)获取匹配的td元素的第一个父元素。第一个父元素将是tr标记,它将警告它的ID,而不是您可以在这里看到的<table>元素的id:http://jsfiddle.net/jfriend00/rxUEp/
如果您想要表元素的ID,那么最好用如下代码指定您想要的实际父元素:
$(document).ready(function() {
alert($('td[id="4"]').closest("table").attr("id"));
});此外,ID值应该以下划线或字母开头,而不是数字,一旦你有了一个有效的ID,你应该使用一个更有效的选择器,如下所示:
<table id="Table1" >
<tr id="tr1">
<td id="cell3" class="cell" >
first cell
</td>
<td id="cell4" class="cell">
second cell
</td>
</tr>
</table>
$(document).ready(function() {
alert($('#cell4').closest("table").attr("id"));
});附注:使用.closest("table")查找所需的父级的另一个原因是,表都有一个隐式的<tbody>标记(即使它不在您的HTML中),这意味着实际的<table>标记实际上是您的<td>上的第三个父级。使用.closest("table"),您不必担心这些查找细节,因为jQuery只会查找您指定的内容。
发布于 2012-04-13 23:17:33
您正在一个尚不存在的表上运行代码。将<script>块移动到表的下方,它就可以工作了(尽管您要获取的是tr父对象,而不是table父对象),或者将其放入onready函数中,以便在整个DOM完成之前不会触发它。
演示:(警告两次,一次在桌子之前,一次在后面) http://jsfiddle.net/Fzcv4/1/
发布于 2012-04-13 23:15:37
如果您明确知道要使用哪个父元素,请尝试使用closest:
$(function() {
alert($('td[id="4"]').closest("table").attr("id"));
});此外,以数字开头的id属性也是无效的。
https://stackoverflow.com/questions/10143517
复制相似问题