首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery $.parents()运行不正常

jQuery $.parents()运行不正常
EN

Stack Overflow用户
提问于 2012-04-13 23:13:42
回答 3查看 2.5K关注 0票数 0

我的html文件中有一个下面的代码,我想访问一个元素的父元素,比如下面代码中的表,它是td的父元素。为此,我使用了以下jquery语法,但它显示为"undefined“。有人能告诉我问题出在哪里吗?

代码语言:javascript
复制
  <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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-13 23:20:27

首先,在加载DOM之前不能运行代码。这意味着您必须将其放在源文件中相关HTML之后,或者使用jQuery的方法等待DOM加载完成:

代码语言:javascript
复制
$(document).ready(function() {
    alert($('td[id="4"]').parents().eq(0).attr("id"));
});

然后,您的代码:

代码语言:javascript
复制
$('td[id="4"]').parents().eq(0)

获取匹配的td元素的第一个父元素。第一个父元素将是tr标记,它将警告它的ID,而不是您可以在这里看到的<table>元素的id:http://jsfiddle.net/jfriend00/rxUEp/

如果您想要表元素的ID,那么最好用如下代码指定您想要的实际父元素:

代码语言:javascript
复制
$(document).ready(function() {
    alert($('td[id="4"]').closest("table").attr("id"));
});

此外,ID值应该以下划线或字母开头,而不是数字,一旦你有了一个有效的ID,你应该使用一个更有效的选择器,如下所示:

代码语言:javascript
复制
<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只会查找您指定的内容。

票数 3
EN

Stack Overflow用户

发布于 2012-04-13 23:17:33

您正在一个尚不存在的表上运行代码。将<script>块移动到表的下方,它就可以工作了(尽管您要获取的是tr父对象,而不是table父对象),或者将其放入onready函数中,以便在整个DOM完成之前不会触发它。

演示:(警告两次,一次在桌子之前,一次在后面) http://jsfiddle.net/Fzcv4/1/

票数 2
EN

Stack Overflow用户

发布于 2012-04-13 23:15:37

如果您明确知道要使用哪个父元素,请尝试使用closest:

代码语言:javascript
复制
$(function() {
    alert($('td[id="4"]').closest("table").attr("id"));
});

此外,以数字开头的id属性也是无效的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10143517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档