我是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];
答案 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节点。但是,表格特别具有rows
和cells
属性,这些属性更易于使用,因此您可以使用以下内容执行此操作:
var first_row= $('#raw_body')[0].rows[0];