【问题标题】:An element has children, but eq() returns undefined when I try to access them一个元素有子元素,但是当我尝试访问它们时 eq() 返回 undefined
【发布时间】:2013-05-19 09:00:59
【问题描述】:

我的代码有一个非常非常奇怪的问题。

我正在尝试遍历一些元素(容器元素的子元素)以更改它们的 HTML,但是当我尝试访问它们时,它们中的许多返回“未定义”。

for(i=0; i<this.shape.length; i++) {
    alert($('#selected_shape_table *').eq(i).find('div').html()); 
    $('#selected_shape_table *').eq(i).find('div').html("Test"); 
}

我已经尝试了各种方法来尝试缩小问题的范围,但我仍然感到困惑。

预期的行为是它循环遍历每个形状,并将每个形状的文本更改为“测试”。实际行为是它改变了一半元素而不改变另一半——我在上面添加了警报以返回它正在访问的元素,并发现它“找到”了其中的一半。例如,元素为 Square、Circle、Triangle、Rhombus 的返回值将是... Square, undefined, Circle, undefined。

到目前为止我学到的东西是:

  • 如果我使用alert("#selected_shape_table has " + $('#selected_shape_table &gt; *').length + " children."); 检查元素的数量,它将返回预期的结果数量。
  • 如果我尝试独立访问元素(即$('#selected_shape_table *').eq(i).find('div').html(),其中 i 是手动指定的数字而不是循环指定的数字),它会表现出相同的意外行为 - 每个第二个元素都是 undefined

有什么想法吗?

编辑:

很抱歉最初没有发布标记。这些形状是动态添加的,这也是我一开始没有贴出来的原因。

<table id="selected_shape_container">
</table> 

元素通过

添加到其中

$('#selected_shape_table').append('&lt;td&gt;&lt;div id="' + shape + '" class="selected_shape"&gt; d' + shape + '&lt;/div&gt;&lt;/td&gt;');

【问题讨论】:

  • 我们可以看到标记吗?请 JsFiddle 全部搞定
  • 可能有一半有后代 div 而另一半没有。没有标记,没人知道。
  • $('#selected_shape_table *')$('#selected_shape_table &gt; *') 不同
  • 啊哈——再往前一点!我的错误...我将警报更改为返回 `$('#selected_shape_table *') 并且它返回的孩子数量是我期望的两倍...
  • this 在上面的代码中指的是什么对象?

标签: jquery dom jquery-selectors


【解决方案1】:

children()怎么样:

for(i=0; i<this.shape.length; i++) {
    alert($('#selected_shape_table').children().eq(i).find('div').html()); 
    $('#selected_shape_table').children().eq(i).find('div').html("Test"); 
}

【讨论】:

  • 这行得通,但我不知道为什么该元素的子项数量是预期数量的两倍,或者发生了什么......
猜你喜欢
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 2023-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多