元素有子元素,但是当我尝试访问它时,eq()返回undefined

时间:2013-05-23 20:37:41

标签: jquery dom jquery-selectors

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

我试图遍历一些元素(容器元素的子元素)来改变它们的HTML,但是当我尝试访问它们时,它们中的许多都返回'undefined'。

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"); 
}

我尝试了各种各样的尝试来尝试缩小问题的范围,但我仍然难过。

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

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

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

有什么想法?

修改:

最初没有发布标记的道歉。这些形状是动态添加的,这就是我最初没有发布的原因。

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

并使用

将元素添加到其中

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

1 个答案:

答案 0 :(得分: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"); 
}