2014-03-29 141 views
3

下面是一个修剪下来的代码片段,我向表中添加一个新行,然后尝试将id属性添加到结果“tr”,以便行可以稍后定位。当我尝试添加属性时,可能该行尚未渲染?有没有更好的方法来实现这一点?将“id”属性添加到Datatable行

test = [0,1,2,3,4,5,6,7,8,9,10]; 

node = $('#MyDataTable').DataTable().row.add(test); 

// this doesn't seem to work - need to end up with: "<tr id='MyUniqueID'>" 
node.to$().attr('id', 'MyUniqueID'); 
+0

我不明白......你的问题是:“将id添加到每一行”或“从每一行获取id”? – balexandre

+0

我试图添加id。我的假设是attr调用会设置属性。错误的假设? – user1088497

回答

5

在Jquery的数据表,数据通常与fnAddData(),它返回其刚添加的行的索引(或多个索引如果多于一个行插入)加入。您可以使用该索引与fnGetNodes()

test = [0,1,2,3,4,5,6,7,8,9,10]; 
var rowIndex = $('#MyDataTable').dataTable().fnAddData(test); 
var row = $('#MyDataTable').dataTable().fnGetNodes(rowIndex); 
$(row).attr('id', 'MyUniqueID'); 
+0

我应该注意到,我试图使用新的1.10 API,使用$().DataTable()而不是$().dataTable()来实现这个工作。但是,既然您的解决方案有效,而且我可以混合使用新旧API,我会将解决方案标记为已接受。谢谢! – user1088497

8

您可以使用“createRow”回调像这样的定位行:

$("#your-id").DataTable({ 
    // Define custom handler for createdRow event 
    "createdRow" : function(row, data, index) { 

     // Add identity if it specified 
     if(data.hasOwnProperty("id")) { 
      row.id = "row-" + data.id; 
     }  
    } 
}); 

// Add some data 
var data = ["col-1","col-2","col-3","col-4"]; 

// Arrays are objects in javascript, so you can add custom properties to your array and read them in createdRow callback 
data.id = "your-id"; 

// Create row in ordinary way 
$("#your-id").row.add(data) 
    .draw(); 
+0

这应该是公认的答案。 – kjdion84

0

我们可以通过fnRowCallback

呈现在表后的行添加属性
"fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull) { 
      if(aData[0] == "A"){ 
       $(nRow).attr('data-blah',"modal"); 
       $(nRow).attr('style',"display:none"); 
      } 
    } 

fnRowCallback

有关详细信息

Working demo