【发布时间】:2020-10-22 14:52:40
【问题描述】:
我有这个 HTML 表格,其中:
- 第一行是表头
- 第三行显示错误数据
- 对于每个错误的行,我们都有 1 行显示正确的数据(第 2 行)。
我想用 HTML/Javascript/Jquery 编写一个函数来突出显示两行之间具有匹配数据的单元格。 我们可能有两行以上的数据。
所以基本上,我们必须测试一组两个行,即第一个标题行将被跳过。比较第 2 到第 3,然后测试第 4 到第 5,然后测试第 6 到第 7 等等。
在下面的示例中,John Popular 先生的第 11 列(列名:必填?)中的预期值为“N”,但 Excel 报告显示“Y”。
对于 Bill Smith 先生,即第 4 行和第 5 行的“未来到期日期”列和“服务日期”列中的日期不同。
我想强调这种差异。
<table border="1" class="dataframe data">
<thead>
<tr style="text-align: right;">
<th>Test</th>
<th>first name</th>
<th>last name</th>
<th>person id</th>
<th>contract id</th>
<th>plan id</th>
<th>authnumber</th>
<th>request?</th>
<th>window type</th>
<th>date request </th>
<th>Required?</th>
<th>Solved?</th>
<th>More attaintion?</th>
<th>Status</th>
<th>Future Exp Date</th>
<th>Issue resolved?</th>
<th>date of service</th>
<th>date of exp</th>
<th>date of system</th>
<th>Receipt date</th>
<th>TAT1</th>
<th>DaysTAT1</th>
<th>TAT2</th>
<th>DaysTAT2</th>
</tr>
</thead>
<tbody>
<tr>
<td>Correct data</td>
<td>John</td>
<td>Popular</td>
<td>759876</td>
<td>J4856</td>
<td>642</td>
<td>837522</td>
<td>A</td>
<td>FO</td>
<td>2019-01-14</td>
<td>N</td>
<td>N</td>
<td>NA</td>
<td>Approved</td>
<td>2019-01-14</td>
<td>NA</td>
<td>NA</td>
<td>NA</td>
<td>2019-01-14</td>
<td>NA</td>
<td>0.0</td>
<td>Y</td>
<td>NA</td>
<td>N</td>
</tr>
<tr>
<td>Wrong Data</td>
<td>John</td>
<td>Popular</td>
<td>759876</td>
<td>J4856</td>
<td>642</td>
<td>837522</td>
<td>A</td>
<td>FO</td>
<td>2019-01-14</td>
<td>Y</td>
<td>N</td>
<td>NA</td>
<td>Approved</td>
<td>2019-01-14</td>
<td>NA</td>
<td>NA</td>
<td>NA</td>
<td>2019-01-14</td>
<td>NA</td>
<td>0.0</td>
<td>Y</td>
<td>NA</td>
<td>N</td>
</tr>
<tr>
<td>Correct data</td>
<td>Bill</td>
<td>Smith</td>
<td>64963</td>
<td>J6291</td>
<td>642</td>
<td>837522</td>
<td>A</td>
<td>FO</td>
<td>2019-01-14</td>
<td>N</td>
<td>N</td>
<td>NA</td>
<td>Approved</td>
<td>2019-01-17</td>
<td>NA</td>
<td>NA</td>
<td>NA</td>
<td>2019-01-18</td>
<td>NA</td>
<td>0.0</td>
<td>Y</td>
<td>NA</td>
<td>N</td>
</tr>
<tr>
<td>Wrong Data</td>
<td>Bill</td>
<td>Smith</td>
<td>64963</td>
<td>J6291</td>
<td>642</td>
<td>837522</td>
<td>A</td>
<td>FO</td>
<td>2019-01-17</td>
<td>N</td>
<td>N</td>
<td>NA</td>
<td>Approved</td>
<td>2019-01-18</td>
<td>NA</td>
<td>NA</td>
<td>NA</td>
<td>2019-01-14</td>
<td>NA</td>
<td>0.0</td>
<td>Y</td>
<td>NA</td>
<td>N</td>
</tr>
</tbody>
</table>
<br>
<button>Check constraints</button>
【问题讨论】:
-
TBH,这个问题有点混乱:我有两行 - 有 4 行 第 11 列 - 有 3 列。 “代码不应突出显示,因为数据不匹配” - 但这完全是代码的用途(或者当它们相同时突出显示?)。如果您不想突出显示任何内容...不要致电
checkConstraints()。您能否清理问题以明确结果应该是什么? -
感谢您的回复。我在 jsfiddle.net/fkmz8swq 创建了原始代码的副本。有两行和 1 个标题行。两行相同。唯一的区别在于第 11 列。
-
这不是很棒的代码,但也不是一个好的 SO 问题,所以这里有一些 cmets:
cell={}应该是cachedValues={},这样才更有意义。 .map() 创建一个数组只是为了便于使用/速度。然后它执行一个多维数组循环(经典i、j变量)并检查 td 文本值是否在cachedValues中 - 如果不是,则将其添加到缓存并引用源单元格(td,看看为什么 cell 是一个坏名字?)。如果是,请使用arguments调用 highlight(),这有点不清楚,但会将不常见的数组调用转换为$([cell1, cell2]) -
然后有一个 second 检查将当前列值与 below 行中的同一列进行比较(这看起来有点奇怪,但与上一行相比没有真正的不同)
-
代码使用
.toggleClass,为了清楚起见,它应该只使用.addClass和.removeClass。
标签: javascript html jquery