谁能帮我实现下,网上的单元格合并那些不满足这个需求,如果写好了 ,分全部奉送!!
解决方案 »
- jqgrid grid中的rowid与数据有关系吗?我在用updateGridRows时弄糊涂了
- 求代码:点击任意空白处关闭DIV
- JS 测试框架
- 怎么用window.open()弹出窗口而不显示黄色提示条
- 关于回收实例
- struts select onchange(参数1,参数2,参数3)如何传参
- 求一个正则表达式,提取字符,在线等,马上给分
- 四舍五入精化到小数点1位,稍改!请各位大大帮忙
- 各位有没有碰到过这样的关于层的使用的杂症?????急死我了, 进来看看吧,多谢了!!
- 怎样在javascript或vbscript下定义byte数组
- ExtJs 怎么添加一个事件 100结贴
- 新人求助:关于object和embed
<tr>
<td >a</td>
<td>x1</td>
<td>1</td>
</tr>
<tr>
<td>a</td>
<td>x1</td>
<td>2</td>
</tr>
<tr>
<td>a</td>
<td>x2</td>
<td>3</td>
</tr>
<tr>
<td>b</td>
<td>x3</td>
<td>4</td>
</tr>
<tr>
<td>c</td>
<td>x4</td>
<td>5</td>
</tr>
<tr>
<td>d</td>
<td>x5</td>
<td>6</td>
</tr>
</table>
<script>
//rowspan="3"
//tabId:表ID,colId:要合并的列ID 从0开始
function mergeCell(tabId,colId ){
var rs=document.getElementById(tabId).rows,ac,acv;
for(var r=0;r<rs.length;r++){
var c=rs[r].cells[colId];
if(acv!=c.innerText){
acv=c.innerText
ac=c;
}else{
ac.rowSpan=(ac.rowSpan||0)+1;
c.parentNode.removeChild(c);
}
}
}
//
mergeCell('tab1',0);
</script>
你看看mergeCell('tab1',0);
mergeCell('tab1',1);
自己看看为什么第二列没有合并??是我的调用方式有问题?mergeCell('tab1',0);
mergeCell('tab1',1);
mergeCell('tab1',2);
还是倒过来
mergeCell('tab1',2);
mergeCell('tab1',1);
mergeCell('tab1',0);
纯粹是不求甚解,没看我的需求!
我只写个例子提出思路
好吧还是按你要求改了下<table id="tab1" width="200" border="1" >
<tr>
<td >a</td>
<td>x1</td>
<td>1</td>
</tr>
<tr>
<td>a</td>
<td>x1</td>
<td>2</td>
</tr>
<tr>
<td>a</td>
<td>x2</td>
<td>1</td>
</tr>
<tr>
<td>b</td>
<td>x3</td>
<td>1</td>
</tr>
<tr>
<td>c</td>
<td>x4</td>
<td>2</td>
</tr>
<tr>
<td>d</td>
<td>x5</td>
<td>2</td>
</tr>
</table>
<script>
//tabId:表ID
function mergeCell(tabId){
var tb=document.getElementById(tabId),rs=tb.rows,ac,acv;
if(!rs.length) return;
for(var i=0,L=rs[0].cells.length;i<L;i++){
for(var r=0;r<rs.length;r++){
var cs=rs[r].cells, c=cs[i];
if( !ac|| (c.innerHTML!=ac.innerHTML ) ){
ac=c;
}else{
if(getP(c) == getP(ac)){
ac.rowSpan=(ac.rowSpan||0)+1;
c.isDel=true;
}
}
}
}
function getP(el){
while( (el=el.previousSibling) && (el.tagName!='TD') );
return el?el.innerHTML:'';
}
var tds=tb.getElementsByTagName('td'),i=tds.length;
while(i--)tds[i].isDel&&tds[i].parentNode.removeChild(tds[i]);
}
mergeCell('tab1');
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>表格相同内容合并</title>
</head>
<body>
合并前:
<table width="400" border="1">
<tr>
<td>a</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr>
<tr>
<td>a</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>6</td>
</tr>
<tr>
<td>a</td>
<td>2</td>
<td>3</td>
<td>3</td>
<td>4</td>
<td> </td>
</tr>
<tr>
<td>b</td>
<td>3</td>
<td>4</td>
<td>6</td>
<td>7</td>
<td> </td>
</tr>
<tr>
<td>b</td>
<td>3</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td> </td>
</tr>
<tr>
<td>cc</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td> </td>
</tr>
<tr>
<td>cc</td>
<td>2</td>
<td>3</td>
<td>5</td>
<td>5</td>
<td> </td>
</tr>
<tr>
<td>d</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td> </td>
</tr>
<tr>
<td>e</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td> </td>
</tr>
</table><br />
合并后:<br />
<table width="400" border="1" id="table1">
<tr>
<td>a</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr>
<tr>
<td>a</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>6</td>
</tr>
<tr>
<td>a</td>
<td>2</td>
<td>3</td>
<td>3</td>
<td>4</td>
<td> </td>
</tr>
<tr>
<td>b</td>
<td>3</td>
<td>4</td>
<td>6</td>
<td>7</td>
<td> </td>
</tr>
<tr>
<td>b</td>
<td>3</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td> </td>
</tr>
<tr>
<td>cc</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td> </td>
</tr>
<tr>
<td>cc</td>
<td>2</td>
<td>3</td>
<td>5</td>
<td>5</td>
<td> </td>
</tr>
<tr>
<td>d</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td> </td>
</tr>
<tr>
<td>e</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td> </td>
</tr>
</table>
</body>
</html>
<script type="text/javascript">
var rowsCount;
var colCount;
function mc1(tableId){
var tb = document.getElementById(tableId);
rowsCount = tb.rows.length;
colCount = tb.rows[0].cells.length;
var startRow = 0;
for(var i=0; i<rowsCount-1; i++){
if(tb.rows[startRow].cells[0].innerHTML == tb.rows[i+1].cells[0].innerHTML){
tb.rows[i+1].removeChild(tb.rows[i+1].cells[0]);
tb.rows[startRow].cells[0].rowSpan=(tb.rows[startRow].cells[0].rowSpan|0)+1;
}else{
mc(tableId,startRow,i,1);
startRow=i+1;
}
}
}
function mc(tableId,startRow,endRow,col){
var tb = document.getElementById(tableId);
if(col >= tb.rows[0].cells.length){
return;
}
var x=false;
for(var i=startRow; i<endRow; i++){
if(tb.rows[startRow].cells[col].innerHTML == tb.rows[i+1].cells[0].innerHTML){
tb.rows[i+1].removeChild(tb.rows[i+1].cells[0]);
tb.rows[startRow].cells[col].rowSpan=(tb.rows[startRow].cells[col].rowSpan|0)+1;
if(i == endRow-1){
mc(tableId,startRow,endRow,col+1);
}
}else{
mc(tableId,startRow,i+0,col+1);
startRow=i+1;
}
}
}
mc1('table1');
</script>
脚本有点问题,更改下:
[code=javascript]<script type="text/javascript">
var rowsCount;
var colCount;
function mc1(tableId){
var tb = document.getElementById(tableId);
rowsCount = tb.rows.length;
colCount = tb.rows[0].cells.length;
var startRow = 0;
for(var i=0; i<rowsCount-1; i++){
if(tb.rows[startRow].cells[0].innerHTML == tb.rows[i+1].cells[0].innerHTML){
tb.rows[i+1].removeChild(tb.rows[i+1].cells[0]);
tb.rows[startRow].cells[0].rowSpan=(tb.rows[startRow].cells[0].rowSpan|0)+1;
if(i+2 == rowsCount){
mc(tableId,startRow,i+1,1);
}
}else{
mc(tableId,startRow,i,1);
startRow=i+1;
}
}
}
function mc(tableId,startRow,endRow,col){
var tb = document.getElementById(tableId);
if(col >= tb.rows[0].cells.length){
return;
}
var x=false;
for(var i=startRow; i<endRow; i++){
if(tb.rows[startRow].cells[col].innerHTML == tb.rows[i+1].cells[0].innerHTML){
tb.rows[i+1].removeChild(tb.rows[i+1].cells[0]);
tb.rows[startRow].cells[col].rowSpan=(tb.rows[startRow].cells[col].rowSpan|0)+1;
if(i == endRow-1){
mc(tableId,startRow,endRow,col+1);
}
}else{
mc(tableId,startRow,i+0,col+1);
startRow=i+1;
}
}
}
mc1('table1');
</script>
在 #2 的基础上稍作调整不就可以了吗?<table id="tab1" width="200" border="1" >
<tr><td >张三</td><td>东营</td><td>1087</td></tr>
<tr><td >张三</td><td>东营</td><td>1082</td></tr>
<tr><td >张三</td><td>新疆</td><td>1082</td></tr>
<tr><td >李文</td><td>西安</td><td>1082</td></tr>
<tr><td >高四</td><td>北京</td><td>1087</td></tr>
<tr><td >高四</td><td>济南</td><td>1087</td></tr>
</table>
<script>
function mergeCell(tabId) {
var rs=document.getElementById(tabId).rows,ac,acv;
for(var col=rs[0].cells.length-2; col>=0; col--) {
for(var r=0;r<rs.length;r++){
var c=rs[r].cells[col];
if(acv!=c.innerText){
acv=c.innerText
ac=c;
}else{
ac.rowSpan=(ac.rowSpan||0)+1;
c.parentNode.removeChild(c);
}
}
}
}mergeCell('tab1');
</script>
function mc(tableId, startRow, endRow, col) {
var tb = document.getElementById(tableId);
if (col >= tb.rows[0].cells.length) {
return;
}
if (col == 0) { endRow = tb.rows.length - 1; }
for (var i = startRow; i < endRow; i++) {
if (tb.rows[startRow].cells[col].innerHTML == tb.rows[i + 1].cells[0].innerHTML) {
tb.rows[i + 1].removeChild(tb.rows[i + 1].cells[0]);
tb.rows[startRow].cells[col].rowSpan = (tb.rows[startRow].cells[col].rowSpan | 1) + 1;
if (i == endRow - 1 && startRow != endRow) {
mc(tableId, startRow, endRow, col + 1);
}
} else {
mc(tableId, startRow, i + 0, col + 1);
startRow = i + 1;
}
}
}
mc('table1', 0, 0, 0);
<script type="text/javascript">
function mc(tableId, startRow, endRow, col) {
var tb = document.getElementById(tableId);
if (col >= tb.rows[0].cells.length) {
return;
}
if (col == 0) { endRow = tb.rows.length - 1; }
for (var i = startRow; i < endRow; i++) {
if (tb.rows[startRow].cells[col].innerHTML == tb.rows[i + 1].cells[0].innerHTML) {
tb.rows[i + 1].removeChild(tb.rows[i + 1].cells[0]);
tb.rows[startRow].cells[col].rowSpan = (tb.rows[startRow].cells[col].rowSpan | 0) + 1;
if (i == endRow - 1 && startRow != endRow) {
mc(tableId, startRow, endRow, col + 1);
}
} else {
mc(tableId, startRow, i + 0, col + 1);
startRow = i + 1;
}
}
}
mc('table1', 0, 0, 0);
</script>
测试的数据为
<table id="tab1" width="200" border="1" >
<tr>
<td>QTQ9-P13</td>
<td>2013-7-22</td>
<td>上报</td>
</tr>
<tr>
<td>QTQ10-3</td>
<td>2013-7-22</td>
<td>上报</td>
</tr>
<tr>
<td>QTQ10-3</td>
<td>2013-7-22</td>
<td>数据库</td>
</tr>
<tr>
<td>QTQ10-3</td>
<td>2013-7-22</td>
<td>数据库</td>
</tr>
</table>
结果图为
,并且最后一列我感觉你没处理
for(var col=rs[0].cells.length-2; col>=0; col--) {
col=rs[0].cells.length-1; 就处理了
具体情况要具体分析