读取JQuery中隐藏列的值

读取JQuery中隐藏列的值,jquery,datatables,Jquery,Datatables,我需要隐藏表中的一列,但在此之后,我无法读取选定行的隐藏列值 dtTable = $('#lookupTable').DataTable({ "columnDefs": [ { "targets": [ 0 ], "visible": false, "searchable": false } ],

我需要隐藏表中的一列,但在此之后,我无法读取选定行的隐藏列值

 dtTable = $('#lookupTable').DataTable({
       "columnDefs": [
           {
               "targets": [ 0 ],
               "visible": false,
               "searchable": false               
           }
        ],  

        aaData: data,
        aoColumns: cols,
        paging: false,
        scrollCollapse: true,
        destroy: true

    });
如您所见,第一列现在已隐藏。我试图用代码读取列值

    selectedIndex = $(this).find('td:eq(0)').text(); 
如果我从代码中删除,我可以读取第一列的值,但如果它是隐藏的,它会给我第二列的值

 dtTable = $('#lookupTable').DataTable({
       "columnDefs": [
           {
               "targets": [ 0 ],
               "visible": false,
               "searchable": false               
           }
        ],  

        aaData: data,
        aoColumns: cols,
        paging: false,
        scrollCollapse: true,
        destroy: true

    });

我很想更改witdh属性,但它不起作用。

CSS选择器不起作用,因为columnDefs中的visible:false并不意味着该列得到等效的显示:none;标记中的样式属性

相反,您必须使用DataTables API来获取隐藏列中的数据

函数fnGetData将实现这一点。它返回单元格中作为参数传递给函数的文本数据

var position = dtTable.fnGetPosition(this);
var hiddenColumnValue = dtTable.fnGetData(position)[0];
以下是文档中的示例

oTable.$('td').click( function () {
    var sData = oTable.fnGetData( this );
    alert( 'The cell clicked on had the value of '+sData );
});
在您的例子中,列是隐藏的,因此您必须将它与第二个API调用结合起来。假设单击第一列隐藏的行,则可以将fnGetData与fnGetPosition函数组合

var position = dtTable.fnGetPosition(this);
var hiddenColumnValue = dtTable.fnGetData(position)[0];
检查文档,它有一些很好的例子

这是工作代码

  $('#lookupTable tbody').on('click', 'tr', function () {

        selectedIndex = dtTable.row(this).data()[0];   
 });

通过dataTables API,您可以使用多种方法以正确的方式从隐藏列中检索数据。例如,您可以使用。正如您在链接中看到的,您可以对单元格使用各种选择器,比如jQuery选择器

下面是一个非常简单的示例,用于注销隐藏的第一列的值:

var dtTable = $('#example').DataTable()  

dtTable.columns([0,1,2]).visible(false);

for (var i=0;i<10;i++) {
    console.log(dtTable.cells({ row: i, column: 0 }).data()[0]);
}    
这一点再怎么强调也不为过:始终使用API,不要尝试在初始化的数据表上使用传统的jQuery

在这种情况下,原因很明显:jQuery只能访问DOM中实际存在的元素。当您在dataTables中隐藏列时,它们不会像在display中那样被隐藏:无,它们不会被渲染


var dtTable=$'test'。DataTable另一个解决方案是添加Css类ID Fiekd Visbilety hideen和$this;重新获取值。

正确的答案非常陈旧。所以,如果正确的答案不适合你。请尝试以下方法:

selectedIndex = dtTable.row(this).data();
此代码将返回为此行获取的原始json对象。比如:

{
   "modify":"false",
   "lastModify":"Tuesday",
   "name":"abc",
   "DT_RowId":"row_1",
   "fileID":"0bde976"
}
要获取文件ID,您只需:

alert("ID = "+selectedIndex.fileID);

传统的jquery无法处理datatable,您必须使用API定义的方法来获取值。在我的例子中,这可以很好地在每行单击按钮时获得隐藏列值-

$(function () {
       var t = $('#mytableid').DataTable({
            "columnDefs": [{
                "searchable": false,
                "orderable": false,
                "visible":false,
                "targets": [0]
            }]
        });

        $('#mytableid').on('click', '.btnClass', function () {
            var currentRow = $(this).closest("tr");
            var columnvalue = t.row(currentRow).data()[0];
            console.log(columnvalue);
        });
});

再加上这个,因为它是旧的,并且没有一个答案具有我曾经使用的快速、干净的jquery格式。即使您试图访问的对象当前未在DOM中呈现,也可以使用传统的jquery选择器,例如隐藏或在另一个页面上,方法是将其作为Datatable的方法。 因此,在你的情况下:

dtable.$("yourJQuerySelector")

这将选择您习惯的元素,并为我的案例工作。

非常感谢,我搜索了fnGetData函数,但它是旧函数,因此我找到了table.row。。所以它起作用了。。这是我的代码。$'lookupTable tbody'。在“单击”、“tr”时,函数{//从单元格selectedIndex=dtTable.rowthis.data[0];}中获取第一个值;这个炒锅,但对于分页指数将改变,需要考虑页面索引,也就是丹尼尔B -你是我的英雄!问题和答案都有1个答案。谢谢,谢谢你的回答。我尝试了代码,但它总是从0到9,即使我改变了顺序。但这没关系,另一个答案对你有用me@unbalanced-是的,因为for循环从0-9开始:本例中的选择器是{row:,column:0}-很好,您让它工作了!您应该描述您的答案或评论您的代码请尝试格式化您的答案,使其更易于理解,并添加一些解释。虽然此代码可以回答问题,但提供有关如何和/或为什么解决问题的其他上下文将提高答案的长期价值。