Skip to content

Commit

Permalink
Updated rowspan & colspan support; working on a single cell
Browse files Browse the repository at this point in the history
  • Loading branch information
Mottie committed Apr 14, 2014
1 parent 754d12c commit 9f80cef
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 20 deletions.
14 changes: 10 additions & 4 deletions src/jquery.tabletojson.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
};

var construct = function(table, headings) {
var i, len, txt, $row, $cell,
var i, j, len, len2, txt, $row, $cell,
tmpArray = [], cellIndex = 0, result = [];
table.children('tbody,*').children('tr').each(function(rowIndex, row) {
if( rowIndex > 0 || notNull(opts.headings) ) {
Expand All @@ -84,7 +84,6 @@
// process rowspans
if ($cell.filter('[rowspan]').length) {
len = parseInt( $cell.attr('rowspan'), 10) - 1;
cellIndex = this.cellIndex;
txt = cellValues(cellIndex, $cell, []);
for (i = 1; i <= len; i++) {
if (!tmpArray[rowIndex + i]) { tmpArray[rowIndex + i] = []; }
Expand All @@ -94,10 +93,17 @@
// process colspans
if ($cell.filter('[colspan]').length) {
len = parseInt( $cell.attr('colspan'), 10) - 1;
cellIndex = this.cellIndex;
txt = cellValues(cellIndex, $cell, []);
for (i = 1; i <= len; i++) {
tmpArray[rowIndex][cellIndex + i] = txt;
// cell has both col and row spans
if ($cell.filter('[rowspan]').length) {
len2 = parseInt( $cell.attr('rowspan'), 10);
for (j = 0; j < len2; j++) {
tmpArray[rowIndex + j][cellIndex + i] = txt;
}
} else {
tmpArray[rowIndex][cellIndex + i] = txt;
}
}
}
// skip column if already defined
Expand Down
32 changes: 16 additions & 16 deletions test/specs/content.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -198,26 +198,26 @@ test('complex table', function() {
/* A table with rowspan & colspan */
test('rowspan & colspan in tbody', function() {
$('#qunit-fixture').html(
'<table id="test-table">' +
'<tr><th>line</th><th>value1</th><th>value2</th></tr>' +
'<tr><td rowspan="2">1</td><td>1.1</td><td>1.2</td></tr>' +
'<tr><td>1.3</td><td>1.4</td></tr>' +
'<tr><td rowspan="2">2</td><td>2.1</td><td>2.2</td></tr>' +
'<tr><td>2.3</td><td>2.4</td></tr>' +
'<tr><td rowspan="2">3</td><td>3.1</td><td>3.2</td></tr>' +
'<tr><td colspan="2">3.3</td></tr>' +
'</table>'
);
'<table id="test-table">' +
'<tr><th>line</th><th>value1</th><th>value2</th><th>value3</th><th>value4</th></tr>' +
'<tr><td rowspan="2">1</td><td>1.1</td><td>1.2</td><td>1.3</td><td rowspan="2">1.4</td></tr>' +
'<tr><td>1.5</td><td>1.6</td><td>1.7</td></tr>' +
'<tr><td rowspan="2">2</td><td>2.1</td><td>2.2</td><td>2.3</td><td>2.4</td></tr>' +
'<tr><td colspan="2">2.5</td><td>2.6</td><td>2.7</td></tr>' +
'<tr><td rowspan="2">3</td><td rowspan="2" colspan="2">3.1</td><td colspan="2">3.2</td></tr>' +
'<tr><td>3.4</td><td>3.5</td></tr>' +
'</table>'
);

expect(1);
var table = $('#test-table').tableToJSON();
var expected = [
{'line':'1','value1':'1.1','value2':'1.2'},
{'line':'1','value1':'1.3','value2':'1.4'},
{'line':'2','value1':'2.1','value2':'2.2'},
{'line':'2','value1':'2.3','value2':'2.4'},
{'line':'3','value1':'3.1','value2':'3.2'},
{'line':'3','value1':'3.3','value2':'3.3'}
{'line':'1','value1':'1.1','value2':'1.2','value3':'1.3','value4':'1.4'},
{'line':'1','value1':'1.5','value2':'1.6','value3':'1.7','value4':'1.4'},
{'line':'2','value1':'2.1','value2':'2.2','value3':'2.3','value4':'2.4'},
{'line':'2','value1':'2.5','value2':'2.5','value3':'2.6','value4':'2.7'},
{'line':'3','value1':'3.1','value2':'3.1','value3':'3.2','value4':'3.2'},
{'line':'3','value1':'3.1','value2':'3.1','value3':'3.4','value4':'3.5'}
];
deepEqual(table, expected);
});

0 comments on commit 9f80cef

Please sign in to comment.