如何访问thead元素的子行?

时间:2011-11-03 17:36:15

标签: javascript jquery dom

我是Javascript的新手,所以我不确定我是不是没有得到它,或者我是否发现了一些错误...但是我不知道是什么。我有一个脚本正在加载数据库查询的结果,然后创建一个图(使用d3库),然后在表中吐出原始数据。到目前为止,这一切都很有效。

接下来我要做的是启用图表上各个数据行的切换。我没有进行Ajax调用以返回服务器并再次获取和解析数据,而是想从原始数据表中读回数据,并重新绘制图形 - 所有客户端。我的问题是尝试从<thead><tbody>元素中获取列名称值。我可以得到这个:

tbody = $("#raw_body");

console.log(tbody);

在Firebug控制台中看到:

[tbody#raw_body]

在控制台中,我可以点击对象,看到[0]实例有“孩子”等等。但是,每次我尝试这样的事情:

console.log(tbody[0].children[0]);

我明白了:

undefined

那么我该如何处理表的行以分配给Javascript对象,比如这个?

r = tbody[0].children[0];

4 个答案:

答案 0 :(得分:3)

$("#raw_body tbody tr")将为表中的所有行提供id为raw_body。

我不确定你的意思是:“那么如何解决表格的行以分配给Javascript对象,比如这样?”

答案 1 :(得分:2)

实际上是.childNodes[0]。 .children()是一个jquery方法,用于扫描子节点的指定模式,因此请使用

tbody[0].childNodes[0]

代替。

答案 2 :(得分:2)

table个对象有一个名为rows的属性。您可以使用它来循环遍历行。

http://www.javascriptkit.com/domref/tableproperties.shtml

var tableObj = $("#myTable").get();
for(var i in tableObj.rows) {
    // Do something
    alert( tableObj.rows[i].innerHTML );
}

如果你想使用jQuery:

var $rows = $("#raw_body tr");
$rows.each(function() {
    // Do something
    alert( $(this).html() );
});

答案 3 :(得分:2)

$("#raw_body")[0]

返回底层DOM对象,而不是jQuery包装器。 DOM对象没有children方法(*)。如果您想要jQuery包装的版本,请改用eq()

var first_row= $('#raw_body').eq(0).children().eq(0);

但是,您可以省略.eq(0)上的$('#raw_body'),因为只会有一个符合#raw_body的元素。 jQuery包装器将元素和元素列表视为相同,因此您不需要提取单个元素就可以在其上调用children()

*:虽然他们确实有childNodes属性。您可能不想使用它,因为那时您必须担心元素之间的空白的Text节点。但是,表格特别具有rowscells属性,这些属性更易于使用,因此您可以使用以下内容执行此操作:

var first_row= $('#raw_body')[0].rows[0];