Jquery 在dataTables中使用类切换列可见性

Jquery 在dataTables中使用类切换列可见性,jquery,jquery-datatables,Jquery,Jquery Datatables,我知道,要使用切换栏中的可见性,我只需执行以下操作: function fnShowHide( iCol ){ /* Get the DataTables object again - this is not a recreation, just a get of the object */ var oTable = $('#content-table-redesign').dataTable(); var bVis = oTable.fnSettings().aoCo

我知道,要使用切换栏中的可见性,我只需执行以下操作:

function fnShowHide( iCol ){
    /* Get the DataTables object again - this is not a recreation, just a get of the object */
    var oTable = $('#content-table-redesign').dataTable();

    var bVis = oTable.fnSettings().aoColumns[iCol].bVisible;
    oTable.fnSetColumnVis( iCol, bVis ? false : true );
}
但是,是否可以使用ID、类或其他方法获取列

问题是,我还允许用户将列拖放到will,如果我按索引,则他们可能单击以隐藏“id”(列0),但他们将其移动到其他位置,现在位置0中的任何内容都将被隐藏,而不是“id”位置

或者,或者以某种方式欺骗插件,使其无论移动到何处,仍然链接列索引

编辑

这是HTML,主体基本相同(每个td都有与其父级相同的类)


身份证件
名称
领域
电子邮件

我正在寻找这个类,因为包含这个类的类将被删除,就像ad和tbody一样

我认为最简单的答案就是dataTables本身不支持这个类,您需要根据类自己手动提取索引。幸运的是,这很容易

var iCol = $('#content-table-redesign tr').first().children('td.yourclass').index();
var bVis = oTable.fnSettings().aoColumns[iCol].bVisible;
oTable.fnSetColumnVis( iCol, bVis ? false : true );
当然,您的选择器可能需要使用
th.yourclass
,这取决于您的表结构。所以它可以改为:

$('#content-table-redesign thead tr').children('th.yourclass').index();
更新

根据您的HTML,以下是选择器:

$('#content-table-redesign thead tr').children('th.ID').index();

您会注意到控制台日志“0”:

我认为最简单的答案是dataTables本身不支持此功能,您需要根据自己的类手动提取索引。幸运的是,这很容易

var iCol = $('#content-table-redesign tr').first().children('td.yourclass').index();
var bVis = oTable.fnSettings().aoColumns[iCol].bVisible;
oTable.fnSetColumnVis( iCol, bVis ? false : true );
当然,您的选择器可能需要使用
th.yourclass
,这取决于您的表结构。所以它可以改为:

$('#content-table-redesign thead tr').children('th.yourclass').index();
更新

根据您的HTML,以下是选择器:

$('#content-table-redesign thead tr').children('th.ID').index();

您将注意到控制台日志“0”:

我从未使用过此插件,但根据html结构,您可以使用jQuery.index()查找子级的索引

看看这把小提琴:


我从未使用过此插件,但根据html结构的不同,您可以使用jQuery.index()查找子项的索引

看看这把小提琴:


使用最新版本的DataTables,您可以指定类名并显示/隐藏列

var data_table = $('#data-table').DataTable();
data_table.columns('.location-col').visible(true);

希望这有帮助。

使用最新版本的DataTables,您可以指定类名并显示/隐藏列

var data_table = $('#data-table').DataTable();
data_table.columns('.location-col').visible(true);

希望这能有所帮助。

我总是得到-1的索引,知道为什么吗?无论它是否可见,或者是否被重新排列,你都必须发布你的HTML和你正在搜索的内容。亚当是对的,但要小心。当你过滤或排序的时候,你就把整个顺序搞混了。我已经更新了我的答案。这对我来说很好。隐姓埋名,排序或过滤如何调整列的位置?你在这里的评论和下面的回答让我觉得你把这和表行混淆了……我总是得到-1的索引,知道为什么吗?无论它是否可见,或者是否被重新排列,你都必须发布你的HTML和你正在搜索的内容。亚当是对的,但要小心。当你过滤或排序的时候,你就把整个顺序搞混了。我已经更新了我的答案。这对我来说很好。隐姓埋名,排序或过滤如何调整列的位置?你在这里的评论和下面的回答让我觉得你把这和表行混淆了……这需要每一行都有一个ID。这是不高效的,特别是当DOM已经给了你一个可以使用的结构时。ID只是一个示例,可以是一个类(这是他想要的)这需要每一行都有一个ID。这不是很有效,特别是当DOM已经给了你一个结构来使用时。ID只是一个例子,可以是一个类(这是他想要的)