2015-04-05 29 views
2

我想添加一個類到特定行中的td。我不想大驚小怪數字指數,而是通過列名訪問td。爲了話,我願意做這樣的事情:jquery datatables - 按列名得到一個td

for each row in the table where the column "role" contains "some text" 
do add the "red" class to the td in the "email" column. 

我已經找到一種方法來做到這一點,但我不是很滿意吧;我覺得它太複雜了。有人有更簡單的建議嗎?

在下面的例子中,我添加類「紅」在列「電子郵件」在TD爲在「角色」列「一些文本」的每一行:

tab = $("#myTable").dataTable({ 
    "data": dataset, 
    "columns": [ 
      { "data": "uid", name: "uid" }, 
      { "data": "name", name: "name"}, 
      { "data": "role", name: "role"}, 
      { "data": "email", name: "email"} 
    ]    
}); 

function GetTdByName(row, column_name) { 
     var idx = row.nodes().column(column_name + ":name")[0]; 
     var selector = "td:eq(" + idx + ")"; 
     return row.nodes().to$().find(selector) 
} 

$("#btn").click(function() { 
    var ta = $('#myTable').DataTable(); 
    ta.rows().every(function() { 
      if ($.inArray(this.data().role , ["some text", "some other text,"]) > -1) {  
       GetTdByName(this, "email").addClass("red"); 
      } 
    }) 
})    

更新

我找到了一個更好的方法來做到這一點。其實,最該解決方案可以在官方文檔中找到:column-selector

ta.rows().every(function() { 
     if ($.inArray(this.data().role , ["some text", "some other text,"]) > -1) {  
      $(ta.column("email:name").nodes()[this.index()]).addClass("red"); 
     } 
    }) 

回答

1

有這個內置的回調:fnRowCallback。這可能不是你想要在你的代碼是什麼,你使用點擊一個按鈕來應用類,但是這是你如何使用fnRowCallback作爲表使得應用類:

tab = $("#myTable").dataTable({ 
    "data": dataset, 
    "columns": [ 
      { "data": "uid", name: "uid" }, 
      { "data": "name", name: "name"}, 
      { "data": "role", name: "role"}, 
      { "data": "email", name: "email"} 
    ], 
    "fnRowCallback": function (nRow, aData, iDisplayIndex, iDisplayIndexFull) { 
     if(aData[2] == 'some text'){ 
     $('td:eq(3)', nRow).addClass('red'); 
     } 
    }, 
... 
+0

感謝markpsmith,但它不符合要求:_「通過列名訪問td」_。你的例子只使用硬編碼的數字索引。 – user3648449 2015-04-07 21:33:41