我正在使用以下语法从TABLE中检索元素。
$("#table").children().children().children().html();
这给了我第一个 TD的内容。然后我转到第二个,发现使用下面的括号语法选择它会给我一条错误消息,说明 html()不是该对象的方法。
$("#table").children().children().children()[1].html();
相反,我必须使用 innerHTML peoperty,就像这样。
$("#table").children().children().children()[1].innerHTML;
我的印象是我做错了什么。在得到我想要的结果的同时,我不禁感到有更多推荐的方法可以解决这种问题。欢迎提出建议。
答案 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(...);
如果您调整表格结构,也可能会考虑不那么脆弱的东西(例如,您可能添加colgroup
或rowgroup
,现在有不同的级别):
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();