2017-10-19 43 views
1
columns().every() https://datatables.net/reference/api/columns().every()

數據表文件這個問題:數據表列()每():當多個表

此列()每()方法...設置回調函數的上下文到 是所討論列的column()實例。

但是,在下面的代碼中使用兩個表時,即使在迭代第二個表的列時,this也始終引用第一個表。它不會在第二個表中設置該類。相反,它將它設置在第一個表中兩次。我究竟做錯了什麼?或者我該如何優雅地解決這個問題?

<!DOCTYPE html> 
<html> 
<title>DataTables test</title> 
<link rel="stylesheet" href="//cdn.datatables.net/v/dt/dt-1.10.16/datatables.min.css"> 
<style> 
.bgcolor { 
    background-color: red; 
} 
</style> 
<script src="//code.jquery.com/jquery-3.2.1.js"></script> 
<script src="//cdn.datatables.net/v/dt/dt-1.10.16/datatables.min.js"></script> 

<table> 
    <thead><tr><td>Head 
    <tbody><tr><td>Cell in first table 
</table> 
<table> 
    <thead><tr><td>Head 
    <tbody><tr><td>Cell in second table 
</table> 

<script> 
$(function() { 
    var tables = $('table').DataTable(); 
    tables.columns().every(function(columnIndex, tableCounter) { 
    var nodes = this.nodes(); 
    $(nodes).addClass('bgcolor'); 
    }); 
}); 
</script> 

https://jsfiddle.net/a3j6zv62/

回答

1

這是因爲你的選擇只是 '表'。

考慮確定每個表,然後應用正確的選擇:

....<table id="example2">.... 

然後:

$('#example2').DataTable(..... 

請參閱更新的小提琴:https://jsfiddle.net/a3j6zv62/1/

UPDATE:

要在文檔的所有表中執行此操作,只需使用一些jque RY循環:

$('table').DataTable({dom: 't'}); 
$('table').each(function() { 
    var api = $(this).dataTable().api(); 
    api.columns().every(function(columnIndex, tableCounter) { 
    var nodes = this.nodes(); 
    console.log([columnIndex, tableCounter, nodes]);  
    $(nodes).addClass('bgcolor'); 
    }); 
}); 

又見更新小提琴https://jsfiddle.net/a3j6zv62/3/

+0

更新可以做什麼,我期待的。謝謝。我注意到的行爲會是DataTables中的一個錯誤嗎? – PaulH

+0

根本不是,它應該做什麼...... – MaVRoSCy

+0

關於'正在做什麼'。 我不明白。每個循環遍歷兩個表:tableCounter的值爲0和1,但是當它爲1時,這是指第一個表而不是第二個表。爲什麼要這樣做? - PaulH 7 m – PaulH