更改具有相同内容的单元格的colspan,因此它们似乎已合并 [英] Change colspan of cells with identical content, so they appear to be merged
问题描述
我有一张表格,其中的单元格中有多余的数据.[左表]
I have got a table with redundant data in cells. [Left table]
我需要将它们加入一个单元中.[右表]
I need to join them into one cell. [Right table]
表的结构:
<table>
<tr>
<td class="bold">Value1:</td>
<td class="green">A</td>
<td class="green">A</td>
<td class="green">A</td>
<td> </td>
<td> </td>
<td> </td>
<td class="green">B</td>
<td class="green">B</td>
</tr>
<tr>
<td class="bold">Value2:</td>
<td> </td>
<td> </td>
<td class="green">C</td>
<td class="green">C</td>
<td> </td>
<td> </td>
<td class="green">D</td>
<td> </td>
</tr>
</table>
我可以隐藏多余的单元格,但是我需要以某种方式设置colspan.
I am able to hide redundant cell, but I need to set colspan somehow.
$(document).ready(function () {
var all = $('.green');
var seen = {};
all.each(function () {
var txt = $(this).text();
if (seen[txt]) {
$(this).hide();
}
else {
seen[txt] = true;
}
});
});
推荐答案
$(document).ready(function() {
var all = $('.green');
var first;
var prev = undefined;
var colspan = 1;
var setColspan = function() {
first.attr('colspan', colspan);
colspan = 1;
}
all.each(function() {
var txt = $(this).text();
if (prev === txt) {
colspan += 1;
$(this).remove();
} else {
// doesnt match, set colspan on first and reset colspan counter
if (colspan > 1) {
setColspan();
}
first = $(this);
prev = txt;
}
});
if (colspan > 1) {
setColspan();
}
});
td {
border: 1px solid;
text-align: center;
min-width: 25px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<table>
<tr>
<td class="bold">Value1:</td>
<td class="green">A</td>
<td class="green">A</td>
<td class="green">A</td>
<td> </td>
<td> </td>
<td> </td>
<td class="green">B</td>
<td class="green">B</td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td class="bold">Value2:</td>
<td> </td>
<td> </td>
<td class="green">C</td>
<td class="green">C</td>
<td> </td>
<td> </td>
<td class="green">D</td>
<td> </td>
</tr>
</table>
认为它会做您想要的,检查匹配的列值的连续块,如果找到匹配项,则将其删除;当找不到匹配项且colspan足够大时,将colspan设置在列表中的第一个然后重置.如果您有连续的值跨越一行的末尾到下一行的开头,则它不起作用.如果是这样的话,会想要一行一行地做
Think it does what you want, checks for consecutive blocks of matching column values, if it finds a match, it removes it, when it doesnt find a match and colspan is large enough it sets the colspan on the first in the list and then resets. it doesnt work if you have consecutive values that span end of one row and into the beginning of the next. would want to do it row by row if that is the case
在上面用边际大小写进行了更新.那样的话就不会设置colspan了.
updated above with edge case if last set of columns are consecutive as well. it wouldnt set the colspan in that case then.
这篇关于更改具有相同内容的单元格的colspan,因此它们似乎已合并的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!