我有一个Datatables表,我需要突出显示在col 2和col 3中具有相同值的行。如果一行具有相同的2个值,则突出显示它们。什么是Datatables中最好的方法。
目前我正在使用JQuery函数将2个值组合成单个字符串和搜索表。但它没有效率和缓慢,如果它们超出第1页就无法找到重复数据。
这是一个例子:http://jsfiddle.net/f9gs8ywt/1/
var data = {
data : [
{ id : 1, car: "toyota", order: "53421" },
{ id : 2, car: "ford", order: "53421" },
{ id : 3, car: "chevrolate", order: "13255" },
{ id : 4, car: "mazda", order: "23155" },
{ id : 5, car: "toyota", order: "51234" },
{ id : 6, car: "ford", order: "53421" },
{ id : 7, car: "BMW", order: "31312" },
{ id : 8, car: "Audi", order: "53412" },
{ id : 9, car: "toyota", order: "51234" },
{ id : 10, car: "BMW", order: "42123" },
{ id : 11, car: "Honda", order: "42153" },
{ id : 12, car: "Jeep", order: "31245" },
{ id : 13, car: "Lexus", order: "12344" },
{ id : 14, car: "toyota", order: "53421" },
{ id : 15, car: "Hyundai", order: "23411" },
{ id : 16, car: "Kia", order: "32415" },
{ id : 17, car: "toyota", order: "51234" },
{ id : 18, car: "Hyundai", order: "35123" }
]
}
var table = $('#example').DataTable({
data : data.data,
columns : [
{ data: 'id', title: 'id' },
{ data: 'car', title: 'car' },
{ data: 'order', title: 'order' },
]
})
table.draw()
答案 0 :(得分:0)
您可以参考this answer,它通过根据列值为行分配CSS类来解决问题。
具体而言,代码使用fnRowCallback(或者您可以使用较新的rowCallback),如下所示:
$('#example').dataTable({
"fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
// aData is the columns array, and you can get
// the required value using the correct index
switch(aData[0]){
case 'toyota':
$(nRow).css('color', 'red')
break;
case 'audi':
$(nRow).css('color', 'green')
break;
case 'lexus':
$(nRow).css('color', 'blue')
break;
}
}
});
希望这有帮助。
答案 1 :(得分:0)
还有其他方法,我只是给你,如何通过添加额外的列来为不同的类似行添加不同颜色的类,使用数据表createdRow
var data = { data : [{ id : 1, car: "toyota", order: "53421" }, { id : 2, car: "ford", order: "53421" }, { id : 3, car: "chevrolate", order: "13255" }, { id : 4, car: "mazda", order: "23155" }, { id : 5, car: "toyota", order: "51234" }, { id : 6, car: "ford", order: "53421" }, { id : 7, car: "BMW", order: "31312" }, { id : 8, car: "Audi", order: "53412" }, { id : 9, car: "toyota", order: "51234" }, { id : 10, car: "BMW", order: "42123" }, { id : 11, car: "Honda", order: "42153" }, { id : 12, car: "Jeep", order: "31245" }, { id : 13, car: "Lexus", order: "12344" }, { id : 14, car: "toyota", order: "53421" }, { id : 15, car: "Hyundai", order: "23411" }, { id : 16, car: "Kia", order: "32415" }, { id : 17, car: "toyota", order: "51234" }, { id : 18, car: "Hyundai", order: "35123" }]};
var colors = ["red","green","blue","grey","pink","brown"];
var temp = {};
for(let i in data.data){
if(data.data[i].car in temp){
data.data[i].color = temp[data.data[i].car];
}else{
var index = getRandom(colors.length);
var color = colors.pop();
temp[data.data[i].car] = color;
data.data[i].color = color;
}
}
function getRandom(num){
return Math.floor(Math.random() * num);
}
//console.log(data.data);
var table = $('#example').DataTable({
data : data.data,
columns : [
{ data: 'id', title: 'id' },
{ data: 'car', title: 'car' },
{ data: 'order', title: 'order' },
],
createdRow: function( row, data, dataIndex){
$(row).addClass(data.color);
}
})
table.draw();

.red{
color:red;
}
.gren{
color:green;
}
.blue{
color:blue;
}
.grey{
color:grey;
}
.pink{
color:pink;
}
.brown{
color:brown;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.9/js/jquery.dataTables.js"></script>
<script src="https://cdn.datatables.net/rowreorder/1.0.0/js/dataTables.rowReorder.js"></script>
<link href="http://cdn.datatables.net/rowreorder/1.0.0/css/rowReorder.dataTables.css" rel="stylesheet"/>
<link href="http://cdn.datatables.net/1.10.0/css/jquery.dataTables.css" rel="stylesheet"/>
<table id="example"></table>
&#13;
添加更多颜色或使其动态
答案 2 :(得分:0)
无论哪种方式,您都必须将car
和order
值与所有其他行进行比较,因为这是标记重复的标准。也许有一些聪明的方法,但你可以让一个函数map
数据并添加一个className
,如果存在任何重复:
function getData(data) {
return data.data.map(function(d) {
for (var i=0,l=data.data.length; i<l; i++) {
var c = data.data[i];
if (d.car == c.car && d.order == c.order && d.id != c.id) {
d.className = 'highlight';
return d
}
}
return d
})
}
它只是将每个项目与所有其他项目进行比较,如果找到匹配项,则会向项目添加className
并跳出循环。
var table = $('#example').DataTable({
data : getData(data),
columns : [
{ data: 'id', title: 'id' },
{ data: 'car', title: 'car' },
{ data: 'order', title: 'order' },
],
rowCallback: function(node, data) {
if (data.className) $(node).addClass(data.className)
}
})