By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
437,605 Members | 2,128 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 437,605 IT Pros & Developers. It's quick & easy.

Script for merging cells (across rows) in the same column

P: n/a
I wrote the following script in order to traverse an HTML table and
merge the cells that have the same value across multiple rows. For some
reason, however, it works for the first, third, and fourth columns in
my table, but in the second column, the merged cell is not aligned at
the center vertically. The cells do get merged, but the cells in the
second column are always aligned at the top. Trying cell.valign =
"middle" had no effect.

Any thoughts? Could it be because I'm not actually deleting the cells
that are to be merged with the top of each such block; instead I merely
set style.display to none for these cells.

Here's my script:

var currCell;
var totRows = T1.rows.length;
var totColumns = T1.rows[1].cells.length;
var numValues = T2.rows[0].cells.length-2;

var i,j;
var nextRowMatch = true;

var myCell;

for (i=0; i<(totColumns-numValues); ++i) {

var currRow = 1;
var j=currRow+1;
var numCellsMerge = 1;

var identical = false;

while (j<totRows) {
var currCell = T1.rows[currRow].cells[i].innerText;
var nextCell = T1.rows[j].cells[i].innerText;

if (currCell != nextCell) {

if (i>0) {

var start=(i-1);
var sameValues = 1;

while ((start >=0) && (sameValues == 1)) {
var prevColText =
T1.rows[currRow].cells[start].innerText;
var prevColNextRowText =
T1.rows[currRow+1].cells[start].innerText;
if (prevColText != prevColNextRowText) {

sameValues = 0;
} else {
start = start-1;
}

}
if (sameValues == 0) {
numCellsMerge = 1;
}

}
if (numCellsMerge 1) {
for (var k=currRow+1; k<j; ++k) {
T1.rows[k].cells[i].style.display = 'none';
}
myCell = T1.rows[currRow].cells[i];
myCell.rowSpan = numCellsMerge;

}

currRow=j;
++j;
numCellsMerge = 1;
identical = false;

} else {
++numCellsMerge;
++j;
identical = true;
}

}

if (identical) {
if (numCellsMerge 1) {

for (var x=currRow+1; x<totRows; ++x) {
T1.rows[x].cells[i].style.display = 'none';
}
myCell = T1.rows[currRow].cells[i];
myCell.rowSpan = numCellsMerge;

}
}

}

Aug 29 '06 #1
Share this Question
Share on Google+
1 Reply


P: n/a

samn wrote:
Trying cell.valign = "middle" had no effect.
Using cell.style.verticalAlign="middle" did the trick.

Aug 29 '06 #2

This discussion thread is closed

Replies have been disabled for this discussion.