如何在dataTables.js中通过列名称获取列索引?
问题
我定义了如下表格列配置:
const flagTableCols = [ { // 0 title: "#", name: "LINE_NO", className:"text-end" },{ // 1 title: "Check #", name: "CHECK_NM", className: "text-center", },{ // 2 title: "Proj", name: "PROJECT_NM", className: "text-center", },{ // 3 title: "Vnd", name: "VENDOR_CD", className: "text-center", },{ // 4 title: "-", name: "AMOUNT_2", visible: false }] let flagTable = $('#flagTable').DataTable({ data: flagTableData, columns: flagTableCols, })
我想通过列的name值获取对应的列索引——比如输入CHECK_NM返回1,输入VENDOR_CD返回3。试过用flagTable.columns('CHECK_NM'),但返回的结果里找不到索引值,该怎么实现?
解决方法
方式1:直接从列配置数组查找
既然你已经有flagTableCols这个列配置数组,直接遍历它就能拿到索引,简单高效:
function getColumnIndexByName(colName) { return flagTableCols.findIndex(col => col.name === colName); } // 使用示例 getColumnIndexByName('CHECK_NM'); // 返回1 getColumnIndexByName('VENDOR_CD'); // 返回3 getColumnIndexByName('AMOUNT_2'); // 返回4
方式2:通过DataTables API获取
如果想依托DataTables实例来实现,可以用columns().indexes()方法,它会返回匹配列的索引集合,取第一个元素就是目标索引:
function getColumnIndexByApi(table, colName) { return table.columns(`[name="${colName}"]`).indexes()[0]; } // 使用示例 getColumnIndexByApi(flagTable, 'CHECK_NM'); // 返回1 getColumnIndexByApi(flagTable, 'VENDOR_CD'); // 返回3
注意这里要使用属性选择器[name="${colName}"]来定位列,而不是直接传入列名。columns().indexes()返回的是DataTables的索引对象,通过[0]可以提取出对应的数字索引。
内容的提问来源于stack exchange,提问作者Travis Heeter
相关产品推荐
相关产品推荐

