日期:2014-05-16 浏览次数:20508 次
计算每个单元格所在的实际行、列,而不是cellIndex,
平时用rowSpan与colSpan计算比较复杂,我自己搞不定,
想出这法子...方便 好用(做jxl的excel导出时直接可用)。
?
IE8、FireFox下测试可用
?
具体代码如下:
?
/**
浏览器判断
*/
var Sys = {};
var ua = navigator.userAgent.toLowerCase();
if (window.ActiveXObject)
Sys.ie = ua.match(/msie ([\d.]+)/)[1];
else if (document.getBoxObjectFor)
Sys.firefox = ua.match(/firefox\/([\d.]+)/)[1];
function containsArray(array, obj) {
for (var i = 0; i < array.length; i++) {
if (array[i] == obj) {
return i;
break;
}
}
return -1;
}
Array.prototype.contains = function(obj) {
return containsArray(this, obj);
}
function PrintTableToExcel(tableId) {
var offsetLeftArray = new Array();
var cell;// 单元格Dom
var col;// 单元格实际所在列
var cellStr;// 每个cell以row,col,rowSpan,colSpan,value形式
var cellStrArray = [];
var objTab = document.getElementById(tableId);
// 遍历第一次取出offsetLeft集合
for (var i = 0; i < objTab.rows.length; i++) {
for (var j = 0; j < objTab.rows[i].cells.length; j++) {
cell = objTab.rows[i].cells[j];
if (offsetLeftArray.contains(cell.offsetLeft) == -1)
offsetLeftArray.push(cell.offsetLeft);
}
}
offsetLeftArray.sort(function(x, y) { return parseInt(x) - parseInt(y); });
alert("offsetLeft集合:" + offsetLeftArray.join(','));
// 遍历第二次生成cellStrArray
for (var i = 0; i < objTab.rows.length; i++) {
for (var j = 0; j < objTab.rows[i].cells.length; j++) {
cell = objTab.rows[i].cells[j];
col = offsetLeftArray.contains(cell.offsetLeft);
cellStr = i + ',' + col + ',' + cell.rowSpan + ',' + cell.colSpan + "," + (Sys.firefox?cell.textContent:cell.innerText);
cellStrArray.push(cellStr);
}
}
// 显示
var str = "行,列,rowSpan,colSpan,值\n";
str += cellStrArray.join('\n');
alert(str);
}
?

?
附件为例子.
?