如何用jQuery DataTables的rows.every()检测行CSS类及解决返回false问题
解决jQuery DataTables rows.every()检测行CSS类返回false的问题
嘿,我之前也踩过这个坑!问题核心在于你对rows.every()回调里的this对象理解有误——它不是jQuery包装的行元素,而是DataTables专属的Row实例对象,直接调用hasClass()自然会返回false。下面给你两种正确的检查方式:
方法一:通过Row实例获取DOM节点转jQuery对象检查
利用this.node()方法拿到当前行的原生DOM节点,再转成jQuery对象,就能正常使用hasClass()方法了:
// 替换成你的表格ID $('#myDataTable').DataTable().rows.every(function() { // 获取当前行的jQuery对象 const $currentRow = $(this.node()); // 检查目标类是否存在 if ($currentRow.hasClass('target-class')) { console.log('当前行包含目标类'); // 这里添加你的业务逻辑 } else { console.log('当前行不包含目标类'); } });
方法二:用原生JS的classList直接检查
如果不想依赖jQuery,也可以直接操作原生DOM节点的classList属性:
$('#myDataTable').DataTable().rows.every(function() { const rowNode = this.node(); if (rowNode.classList.contains('target-class')) { console.log('当前行包含目标类'); } });
额外小技巧:快速筛选带特定类的行
如果你只是想批量获取带有目标类的行,其实不用遍历,直接用DataTables的API组合就能快速拿到:
const table = $('#myDataTable').DataTable(); // 直接筛选出带目标类的行的jQuery对象 const targetRows = table.rows().nodes().to$().filter('.target-class'); // 比如给这些行加高亮 targetRows.css('background-color', '#f5f5f5');
内容的提问来源于stack exchange,提问作者starhunter
相关产品推荐
相关产品推荐

