在包围时,将元素作为jQuery对象获取失败

时间:2014-02-12 07:16:26

标签: javascript jquery html

我正在使用以下语法从TABLE中检索元素。

$("#table").children().children().children().html();

这给了我第一个 TD的内容。然后我转到第二个,发现使用下面的括号语法选择它会给我一条错误消息,说明 html()不是该对象的方法。

$("#table").children().children().children()[1].html();

相反,我必须使用 innerHTML peoperty,就像这样。

$("#table").children().children().children()[1].innerHTML;

我的印象是我做错了什么。在得到我想要的结果的同时,我不禁感到有更多推荐的方法可以解决这种问题。欢迎提出建议。

2 个答案:

答案 0 :(得分:3)

那是因为html是一个jQuery函数,但[1]为你提供了DOM元素。

您可以使用.eq(n)获取第n个元素:

$("#table").children().children().children().eq(1).html();

...但如果你循环使用它们,重复上述内容效率非常低。相反,请考虑each

$("#table").children().children().children().each(function() {
    // Use $(this).html(); for each cell's contents
});

更新在评论中你说:

  

我的目标是四个不同的元素,如143,237等索引。

在这种情况下,请记住初始元素集,然后根据需要使用.eq

var cells = $("#table").children().children().children();
cells.eq(143).html(...);
cells.eq(237).html(...);

如果您调整表格结构,也可能会考虑不那么脆弱的东西(例如,您可能添加colgrouprowgroup,现在有不同的级别):

var cells = $("#table td");

答案 1 :(得分:1)

这是因为当你使用index访问元素时,它返回一个dom元素引用而不是jQuery对象,因此.html()方法不会出现。

var first  = $("#table").find('td').eq(0).html();
var second =  $("#table").find('td').eq(1).html();

var $tds = $('#table td')
var first  = $tds.eq(0).html();
var second = $tds.eq(1).html();