parseTable = function (element) {
var result = '',
rows = element.querySelectorAll('tr'),
colsCount = getMaxColumns(rows),
allSpans = {};
for (var rowsIdx = 0, rowsLen = rows.length; rowsIdx < rowsLen; rowsIdx++) {
var row = rows[rowsIdx],
csvLine = [],
cells = row.querySelectorAll('th, td'),
spanIdx = 0;
for (var cellIdx = 0; cellIdx < colsCount; cellIdx++) {
var cell = cells[cellIdx],
rowSpan = 1,
colSpan = 1;
if (typeof cell !== 'undefined') {
var attr1 = cell.getAttribute('rowSpan')
if (attr1) {
rowSpan = parseInt(attr1);
}
var attr2 = cell.getAttribute('colSpan')
if (attr2) {
colSpan = parseInt(attr2);
}
}
for (var j = 0; j < colSpan; j++) {
while (allSpans.hasOwnProperty(spanIdx.toString())) {
var val = allSpans[spanIdx.toString()][1];
csvLine.push(val);
allSpans[spanIdx.toString()][0] -= 1;
if (allSpans[spanIdx.toString()][0] == 0) {
delete allSpans[spanIdx.toString()];
}
spanIdx += 1;
}
if (typeof cell !== 'undefined') {
var cellText = parseCell(cell);
csvLine.push(cellText);
}
if (rowSpan > 1) {
allSpans[spanIdx.toString()] = [rowSpan - 1, cellText];
}
spanIdx += 1;
}
}
result += csvLine.join() + '\n';
}
return result
}