Jquery 更改具有相同内容的单元格的colspan,使它们看起来是合并的

Jquery 更改具有相同内容的单元格的colspan,使它们看起来是合并的,jquery,html-table,Jquery,Html Table,我有一个表格,单元格中有冗余数据。[左表] 我需要把他们连在一个牢房里。[右表] 表的结构: <table> <tr> <td class="bold">Value1:</td> <td class="green">A</td> <td class="green">A</td> <td class=

我有一个表格,单元格中有冗余数据。[左表]

我需要把他们连在一个牢房里。[右表]

表的结构:

<table>
  <tr>
    <td class="bold">Value1:</td>
    <td class="green">A</td>
    <td class="green">A</td>
    <td class="green">A</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td class="green">B</td>
    <td class="green">B</td>
  </tr>
  <tr>
    <td class="bold">Value2:</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td class="green">C</td>
    <td class="green">C</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td class="green">D</td>
    <td>&nbsp;</td>
  </tr>
</table>

您可以通过设置colspan,

var cell=$([selector]);
cell.attr('colspan',N);
然后删除以下同级

var sib=cell.next();
for(var i=0;i<N;i++)
{
  if(sib.length==0)break; 
  var toBeRemoved=sib;
  sib=sib.next(); 
  toBeRemoved.remove();
}
var sib=cell.next();
对于(var i=0;i
$(文档).ready(函数(){
var all=$('.green');
var优先;
var prev=未定义;
var colspan=1;
var setColspan=函数(){
第一,attr('colspan',colspan);
colspan=1;
}
all.each(函数(){
var txt=$(this.text();
if(prev==txt){
colspan+=1;
$(this.remove();
}否则{
//不匹配,首先设置colspan并重置colspan计数器
如果(colspan>1){
setColspan();
}
第一项=$(本项);
prev=txt;
}
});
如果(colspan>1){
setColspan();
}
});
td{
边框:1px实心;
文本对齐:居中;
最小宽度:25px;
}

价值1:
A.
A.
A.
B
B
价值2:
C
C
D
几乎完美,但当任何一行的最后一个td中的
文本与下一行的第一个td中的文本相同时,它将不起作用

试试下面的方法。解释在评论中

$(文档).ready(函数(){
//在每个tr上循环
$('tr')。每个((索引,tr)=>{
//获得第一个td
设td=$(tr).find('td').eq(0);
//设置colspan值
设colspan=1;
//如果存在td,则继续
while(td.长度){
//查找下一个td
设next=td.next();
//如果当前td和下一个td具有相同的文本,则删除下一个td
如果(td.text().trim().length>0&&td.text().trim()==next.text().trim()){
//删除下一个td
下一步,删除();
//增加colspan
colspan++;
//设置colspan
td.attr('colspan',colspan);
}否则{
//重置colspan
colspan=1;
//将next设置为当前td
td=下一个;
}
}
});
});
td{
边框:1px实心;
文本对齐:居中;
最小宽度:25px;
}

价值1:
A.
A.
A.
B
B
B
C
C
D

您知道当这4个值不唯一时,您的表将崩溃并烧毁,对吗?当任何行的最后一个td中的
文本与下一行的第一个td中的文本相同时,您的逻辑将不起作用。
var sib=cell.next();
for(var i=0;i<N;i++)
{
  if(sib.length==0)break; 
  var toBeRemoved=sib;
  sib=sib.next(); 
  toBeRemoved.remove();
}