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> </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,
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();
}