我有下表:http: //jsfiddle.net/UfhVc/1/
我在尝试着:
- 在具有相同 ID 的所有行上获取相同的样式
- 突出显示具有相同 ID 的行上的每个差异。
但现在我似乎无法弄清楚第 1 步所需的逻辑)。用 jQuery 没问题,我只是发现用纯 js 更容易。
此外,我在这部分代码中收到警告:
table.rows[i+1].cells[0].innerHTML
我有下表:http: //jsfiddle.net/UfhVc/1/
我在尝试着:
但现在我似乎无法弄清楚第 1 步所需的逻辑)。用 jQuery 没问题,我只是发现用纯 js 更容易。
此外,我在这部分代码中收到警告:
table.rows[i+1].cells[0].innerHTML
像这样?
var newColor = "#F1D0F2";
var diffColor = "#CECECE";
$('#tbl tr:gt(0)').each(function () { //Loop through the trs leaving out the header
var txt = $(this).find('td:eq(0)').text(); //get the text of the id column
var $this = $(this);
var matchingRows = $('#tbl tr').not(this).filter(function () { //get the matching rows whose id colum value is same
return $(this).find('td:eq(0)').text() == txt;
}).css('background-color', newColor); //apply css for match
matchingRows.find('td').css('background-color', function (i) { //apply background color
if ($this.find('td:eq(' + i + ')').text() != this.innerHTML) return diffColor; // to the tds of matching rows but column valud differ.
});
});
参考:
编辑
根据您的评论,这里是更新:
var allColors = ["#333333","#990099", "#1295A6", "#FFFF99"]; //Set up the colors in to an array
var diffColor = "#CECECE";
$('#tbl tr:gt(0)').each(function () {
var txt = $(this).find('td:eq(0)').text();
var $this = $(this);
if($this.is('.transformed')) //check for class transformed is present if so this has already been processed skip it.
return;
//Get the matching rows whose id column value is same
var matchingRows = $('#tbl tr').filter(function () {
return $(this).find('td:eq(0)').text() == txt;
}).css('background-color', allColors.shift()).addClass('transformed'); //Set the color and add a class to avoid latter processing
matchingRows.find('td').css('background-color', function (i) { //apply background color
var $parTd = $this.find('td:eq(' + $(this).index() + ')');
if ($.trim($parTd.text()) != $.trim(this.innerHTML)) // to the tds of matching rows but column value differ.
{
$parTd.css('background-color', diffColor);
return diffColor;
}
});
});
对于第一步:
有几种方法可以做到这一点,我可能会为所有特定类型的表格单元格附加一个类,这样你就可以轻松地一次选择它们进行编辑。
<table>
<tr>
<td class="id-cell"></td>
</tr>
</table>
然后您可以简单地使用 CSS 查询它,例如:
.id-cell {
background-color:red;
}
但是你也可以使用更多的 jQuery / JavaScript 来找到你正在寻找的那些表格单元格。这个小提琴使用 jQuery 查找“id”列中的所有单元格,并将背景涂成红色。
另一种方法:
$("table tr:not(:first-child) td:first-child").each(function(index) {
var thisId = $(this);
$("table tr:not(:first-child) td:first-child").each(function(_index) {
if (index != _index && thisId.text() == $(this).text())
{
thisId.parent("tr").css("backgroundColor", "red");
$(this).css("backgroundColor", "red");
$(this).siblings("td").each(function(sindex) {
var other = $(thisId.siblings()[sindex]);
if (other.text() != $(this).text())
other.css("backgroundColor", "yellow");
});
}
});
});