我有一个相当大的表,在运行Datatables API时需要几秒钟才能呈现。
在渲染时,我将所有行的不透明度设置为0,并在开头添加一行包含一个注释“Rendering table ...”的注释,这样就可以显示更少的juttering和丑陋的表,直到它准备好了可见
使用initComplete回调函数,此行将被删除,其他行可见:
"initComplete": function(){
$( 'table.MIS_return_data tbody.MIS_returned_content tr.render-note' ).remove();
$( 'table.MIS_return_data tbody.MIS_returned_content tr:not(.no-select)' ).css('opacity', 1);
$( 'table.MIS_return_data tbody.MIS_returned_content tr.no-select' ).css('opacity', 0.6);
},
问题在于,在表格底部我得到一个注释:
显示580个条目中的1到580个(从581个条目中过滤掉)
它已过滤的1个条目是带有渲染注释的行。
我需要完全删除该行,并且不再由API“看到”。我该怎么做?
我也试过使用以下代码而不是jQuery.remove():
"initComplete": function(){
table.rows( $( 'table.MIS_return_data tbody.MIS_returned_content tr.render-note' ) ).remove();
table.draw();
$( 'table.MIS_return_data tbody.MIS_returned_content tr:not(.no-select)' ).css('opacity', 1);
$( 'table.MIS_return_data tbody.MIS_returned_content tr.no-select' ).css('opacity', 0.6);
},
但这不仅不起作用,唯一它也只将不透明度应用于表格的第一行。
一种解决方法是使用以下方法完全删除底部的注释:
"language": {
"infoFiltered": "",
},
然而,这并不理想,因为我希望用户能够过滤结果,通过某些参数隐藏/显示行。因此,该说明将具有实际用途。
如果您需要更多详细信息或澄清所写内容,请询问。
任何帮助表示赞赏!感谢
答案 0 :(得分:2)
像@annoyingmouse上面说的那样..
在表格上注入一个表示表格的“块”...一旦javascript完成构建表格,就可以隐藏块并使用粗略的隐藏/显示或使用父级的CSS淡入淡出过渡来显示表格。通过这种方式,可以更好地分离关注点...数据表通过正确的数据来处理它,ui通过在正确的时间显示和隐藏来实现它的目的。
这与其他网站(例如linkedin和facebook)使用的策略相同。在初始加载时,页面呈现一个静态块(在fb墙上,例如这个块看起来像一个淡出的墙贴)...然后一旦xhr请求返回数据,前端应用程序用实际内容替换静态块。 / p>
在你的情况下,它会是相同的,但不是等待xhr来解决它,而是由数据表渲染回调触发。