1/*
2This is a small JQuery utility to export HTML table as CSV file.
3
4The author is Kunal Babre and the original script can be found in
5http://www.kunalbabre.com/projects/table2CSV.php. Permissions are
6granted by the author to make changes and redistribute.
7
8Changes made by jning: To avoid exporting the textbox, radio buttons and etc.
9in the table, the parameters rowNum and index in $().find().each() or
10$().filter().find.each() help to ignore non-data cells.
11*/
12
13jQuery.fn.table2CSV = function(rowNum, options) {
14    var options = jQuery.extend({
15        separator: ',',
16        header: [],
17        delivery: 'popup' // popup, value
18    },
19    options);
20
21    var csvData = [];
22    var headerArr = [];
23    var el = this;
24
25    //header
26    var numCols = options.header.length;
27    var tmpRow = []; // construct header avalible array
28
29    if (numCols > 0) {
30        for (var i = 0; i < numCols; i++) {
31            tmpRow[tmpRow.length] = formatData(options.header[i]);
32        }
33    } else {
34        $(el).filter(':visible').find('th').each(function(index) {
35            if (index > 0 && $(this).css('display') != 'none')
36                tmpRow[tmpRow.length] = formatData($(this).html());
37        });
38    }
39
40    row2CSV(tmpRow);
41
42    // actual data
43    $(el).find('tr').each(function(index) {
44        if (index < rowNum + 1) {
45            var tmpRow = [];
46            $(this).filter(':visible').find('td').each(function(index) {
47                if (index > 0 && $(this).css('display') != 'none')
48                    tmpRow[tmpRow.length] = formatData($(this).html());
49            });
50            row2CSV(tmpRow);
51        }
52    });
53    if (options.delivery == 'popup') {
54        var mydata = csvData.join('\n');
55        return popup(mydata);
56    } else {
57        var mydata = csvData.join('\n');
58        return mydata;
59    }
60
61    function row2CSV(tmpRow) {
62        var tmp = tmpRow.join('') // to remove any blank rows
63        // alert(tmp);
64        if (tmpRow.length > 0 && tmp != '') {
65            var mystr = tmpRow.join(options.separator);
66            csvData[csvData.length] = mystr;
67        }
68    }
69    function formatData(input) {
70        // replace " with â
71        var regexp = new RegExp(/["]/g);
72        var output = input.replace(regexp, "â");
73        //HTML
74        var regexp = new RegExp(/\<[^\<]+\>/g);
75        var output = output.replace(regexp, "");
76        if (output == "") return '';
77        return '"' + output + '"';
78    }
79    function popup(data) {
80        var generator = window.open('', 'csv', 'height=400,width=600');
81        generator.document.write('<html><head><title>CSV</title>');
82        generator.document.write('</head><body >');
83        generator.document.write('<textArea cols=70 rows=15 wrap="off" >');
84        generator.document.write(data);
85        generator.document.write('</textArea>');
86        generator.document.write('</body></html>');
87        generator.document.close();
88        return true;
89    }
90};
91