tableparser

by perqa

HTML

<table border="1" id="example-table">
    <thead>
        <tr>
            <th>line</th>
            <th>value1</th>
            <th>value2</th>
        </tr>
    </thead>
    <tbody>
        <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>
    </tbody>
</table>
<button id="convert-table">Convert</button>
<pre id="res"></pre>

JavaScript

/*!
 * jQuery Parse Table plugin
 *
 * Copyright 2011, Francis Chong
 * Licensed under the MIT licenses.
 *
 */
(function($) {
    $.fn.parsetable = function(dupCols, dupRows) {
        if (dupRows == undefined) dupRows = false;
        if (dupCols == undefined) dupCols = false;
        
        var columns = [],
        curr_x = 0,
        curr_y = 0;

        $("tr", this).each(function(row_idx, row) {
            curr_y = 0;
            $("td, th", row).each(function(col_idx, col) {
                var rowspan = $(col).attr('rowspan') || 1;
                var colspan = $(col).attr('colspan') || 1;
                var content = col.innerHTML || "";

                var x = 0,
                y = 0;
                for (x = 0; x < rowspan; x++) {
                    for (y = 0; y < colspan; y++) {
                        if (columns[curr_y + y] == undefined) {
                            columns[curr_y + y] = []
                        }

                        while (columns[curr_y + y][curr_x + x] != undefined) {
                            curr_y += 1
                            if (columns[curr_y + y] == undefined) {
                                columns[curr_y + y] = []
                            }
                        }

                        if ((x == 0 || dupRows) && (y == 0 || dupCols)) {
                            columns[curr_y + y][curr_x + x] = content
                        } else {
                            columns[curr_y + y][curr_x + x] = ""
                        }
                    }
                }
                curr_y += 1;
            });
            curr_x += 1;
        });

        return columns;
    };
})(jQuery);