非服务器端Datatables获取筛选后行数问题求助
解决客户端模式下Datatable筛选后行数显示问题
问题原因
是的,这确实和未启用服务器端处理有关。在客户端模式下,Datatable默认不会自动维护recordsFiltered属性的值——这个字段原本是为服务器端处理设计的,由后端返回筛选后的总行数。客户端模式下,page.info()返回的recordsFiltered会和recordsTotal保持一致,所以直接用它无法获取筛选后的真实行数。
正确获取筛选后行数的方法
你需要通过Datatable实例的API直接获取筛选后的行数量,具体步骤如下:
确保持有Datatable实例引用
初始化表格时保存实例对象,方便后续调用API:// 替换成你的表格ID var datatable = $("#your-table-id").DataTable({ // 你的表格配置项,比如columns、paging等 });获取筛选后的行数并更新显示
使用rows({ search: 'applied' }).count()方法获取当前应用筛选后的总行数,然后替换原代码中的recordsFiltered:// 获取分页信息 var datatableInfo = datatable.page.info(); // 获取筛选后的总行数 var filteredRowCount = datatable.rows({ search: 'applied' }).count(); // 更新页面显示的信息文本 $("#data-kt-table-info").html("Showing " + (datatableInfo.start + 1) + " to " + datatableInfo.end + " of " + filteredRowCount + " rows");监听筛选事件自动更新
为了在用户触发筛选(比如输入搜索框、选择筛选条件)时自动更新显示信息,需要绑定search.dt事件:datatable.on('search.dt', function() { var datatableInfo = datatable.page.info(); var filteredRowCount = datatable.rows({ search: 'applied' }).count(); $("#data-kt-table-info").html("Showing " + (datatableInfo.start + 1) + " to " + datatableInfo.end + " of " + filteredRowCount + " rows"); });
这样就能在筛选后正确显示筛选后的行数,而非原始总行数了。
内容的提问来源于stack exchange,提问作者user2506626
相关产品推荐
相关产品推荐

