Javascript Datatables:从DOM数据源按名称引用列
现在,我有以下html表:Javascript Datatables:从DOM数据源按名称引用列,javascript,jquery,html,datatables,Javascript,Jquery,Html,Datatables,现在,我有以下html表: <table id="datatable"> <thead> <th>fruits</th> <th>vegs</th> </thead> <tbody> <tr> <td>apple</td> <td>po
<table id="datatable">
<thead>
<th>fruits</th>
<th>vegs</th>
</thead>
<tbody>
<tr>
<td>apple</td>
<td>potato</td>
</tr>
<tr>
<td>apple</td>
<td>carrot</td>
</tr>
</tbody>
</table>
果实
蔬菜
苹果
马铃薯
苹果
胡萝卜
我想按名称引用这些列,如下所示:
<script type="text/javascript">
$(document).ready(function() {
/* Init the table */
var oTable = $('#datatable').dataTable( );
//get by sTitle
console.log(oTable);
var row = oTable.fnGetData(1)
console.log(row['vegs']);//should return 'carrot'
} );
</script>
$(文档).ready(函数(){
/*在桌子上*/
var-oTable=$('#datatable').datatable();
//通过缝合
控制台日志(可旋转);
var row=oTable.fnGetData(1)
console.log(第['vegs'行]);//应返回'carrot'
} );
当数据源为DOM时,是否需要使用javascript函数
fnGetData()
来返回对象而不是数组?这项功能尚未测试,但可能会起作用:
$(function() {
// Get an array of the column titles
var colTitles = $.map($('#datatable th'), function() {
return this.text();
}).get();
var oTable = $('#datatable').dataTable();
var row = oTable.fnGetData(1);
console.log(row[colTitles.indexOf('vegs')]);
});
这尚未经过测试,但可能有效:
$(function() {
// Get an array of the column titles
var colTitles = $.map($('#datatable th'), function() {
return this.text();
}).get();
var oTable = $('#datatable').dataTable();
var row = oTable.fnGetData(1);
console.log(row[colTitles.indexOf('vegs')]);
});
在查看了的答案和之后,我得出了以下结论:
$(function() {
var oTable = $('#datatable').dataTable( );
var oSettings = oTable.fnSettings(); // you can find all sorts of goodies in the Settings
var colTitles = $.map(oSettings.aoColumns, function(node) {
return node.sTitle;
});
var row = oTable.fnGetData(1);
console.log(row[colTitles.indexOf('vegs')]);
} );
但是必须有一个更好的方法…在看了我们的答案后,我得出了以下结论:
$(function() {
var oTable = $('#datatable').dataTable( );
var oSettings = oTable.fnSettings(); // you can find all sorts of goodies in the Settings
var colTitles = $.map(oSettings.aoColumns, function(node) {
return node.sTitle;
});
var row = oTable.fnGetData(1);
console.log(row[colTitles.indexOf('vegs')]);
} );
但是必须有更好的方法…因此,我进行了一些研究,发现
datatable
插件在处理列方面不是很聪明-它们总是需要使用整数访问的数组。处理列及其属性的唯一方法是-感谢@JustinWrobel在初始化后找到访问该对象的fnSettings
方法。如果您还没有这样做,您就只能使用$table.find(“thead th”)
但是,现在很容易将表作为对象数组获取:
var table = $mytable.dataTable(…);
var cols = table.fnSettings().aoColumns,
rows = table.fnGetData();
var result = $.map(rows, function(row) {
var object = {};
for (var i=row.length-1; i>=0; i--)
// running backwards will overwrite a double property name with the first occurence
object[cols[i].sTitle] = row[i]; // maybe use sName, if set
return object;
});
result[1]["vegs"]; // "carrot"
因此,我做了一些研究,发现
datatable
插件在处理列方面不是很聪明-它们总是需要使用整数访问的数组。处理列及其属性的唯一方法是-感谢@JustinWrobel在初始化后找到访问该对象的fnSettings
方法。如果您还没有这样做,您就只能使用$table.find(“thead th”)
但是,现在很容易将表作为对象数组获取:
var table = $mytable.dataTable(…);
var cols = table.fnSettings().aoColumns,
rows = table.fnGetData();
var result = $.map(rows, function(row) {
var object = {};
for (var i=row.length-1; i>=0; i--)
// running backwards will overwrite a double property name with the first occurence
object[cols[i].sTitle] = row[i]; // maybe use sName, if set
return object;
});
result[1]["vegs"]; // "carrot"
棘手的如果有两个标题单元格具有相同的类/文本值,会发生什么情况?嗯。。。我不确定,但我猜它会返回第一个。很棘手。如果有两个标题单元格具有相同的类/文本值,会发生什么情况?嗯。。。我不确定,但我想它会返回第一个。