2014-03-29 138 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