如何将<tr>格式字符串添加到Datatables表格?已尝试多法仍遇问题
解决DataTables添加时出现[object HTMLTableRowElement]的问题
我太懂你折腾一天的抓狂感了!这个问题的核心是误解了DataTables row.add()方法的参数要求——它默认不认直接传入的jQuery/DOM行元素,会把整个元素当成单一数据项,所以才会把[object HTMLTableRowElement]塞进第一列里。下面给你两种靠谱的解决办法:
方法一:提取单元格文本成数组(适合简单内容)
如果你的行内容只是纯文本,直接把<td>里的内容提取成数组传给row.add()就好,这是DataTables最推荐的方式:
var table = $j('#table_view_subs').DataTable(); var fakehtml = '<tr><td> 1 </td> <td> 2 </td> <td> 3 </td> <td> 4 </td> <td> 5 </td></tr>'; // 解析HTML,提取每个td的文本并整理成数组 var rowData = $(fakehtml).find('td').map(function() { return $(this).text().trim(); // 去掉多余空格 }).get(); table.row.add(rowData).draw();
方法二:直接插入DOM行节点(适合复杂HTML结构)
如果你的行里有按钮、输入框这类复杂DOM元素,不想丢失HTML结构,可以直接把原生DOM行节点传给row.add(),注意要传原生元素而不是jQuery对象:
var table = $j('#table_view_subs').DataTable(); var fakehtml = '<tr><td> 1 </td> <td> 2 </td> <td> 3 </td> <td> 4 </td> <td> 5 </td></tr>'; // 把jQuery对象转成原生DOM元素 var newRowElement = $(fakehtml)[0]; // 直接传入原生行元素 table.row.add(newRowElement).draw();
为什么之前的方法不行?
当你传入$(fakehtml)时,DataTables会把这个jQuery包装对象当成一个单一的数据条目,调用它的toString()方法就得到了[object HTMLTableRowElement],自然就只会显示在第一列啦。
额外注意事项
- 如果你的表格配置了
columns.data或者有隐藏列,要确保数组的顺序和表格列的顺序完全对应 - 复杂DOM结构的行,插入后如果需要绑定事件,记得在
draw()之后重新绑定,或者用DataTables的drawCallback回调处理
内容的提问来源于stack exchange,提问作者user5646514
相关产品推荐
相关产品推荐

