页面table导出到Excel(当前只能导出Excel)

如果不想在这里复制,直接网盘:http://pan.baidu.com/s/1kVkIcRH

1、修改的tableExport.js--->tableExport_CN.js被我重命名了

2、修改后的jquery.base64.js

3、页面测试使用

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>导出table</title>
<link rel="stylesheet" href="../../common/bootstrap/3.3.7/css/bootstrap.min.css">  
<script src="../../common/js/jquery/1.11.1/jquery.min.js"></script>
<script src="../../common/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<button type="button" class="btn btn-default" id="export_excel">导出Excel</button>
<!-- <button type="button" class="btn btn-primary" id="export_pdf">导出pdf</button> -->
<!-- <button type="button" class="btn btn-success" id="export_png">导出png</button> -->
<button type="button" class="btn btn-info">Info</button>
<div class="table-responsive">
  <table class="table table-bordered" id="content_info">
    <caption>导出Excel头信息</caption>
    <thead>
      <tr>
        <th>列头1</th>
        <th>列头2</th>
        <th>列头3</th></tr>
    </thead>
    <tbody>
      <tr>
        <td>A1</td>
        <td>B1</td>
        <td>C1</td></tr>
      <tr>
        <td>A2</td>
        <td>B2</td>
        <td>C2</td></tr>
      <tr>
        <td>A3</td>
        <td>B3</td>
        <td>C3</td></tr>
      <tr>
        <td>A4</td>
        <td>B4</td>
        <td>C4</td></tr>
    </tbody>
  </table>
</div>
</body>
<script type="text/javascript" src="../../common/js/tableExport/tableExport_CN.js"></script>
<script type="text/javascript" src="../../common/js/tableExport/jquery.base64.js"></script>
<script type="text/javascript" src="../../common/layer/3.0.3/layer.js"></script>
<script type="text/javascript" src="../../common/js/tableExport/jspdf/libs/sprintf.js"></script>
<script type="text/javascript" src="../../common/js/tableExport/jspdf/jspdf.js"></script>
<script type="text/javascript" src="../../common/js/tableExport/jspdf/libs/base64.js"></script>
<script type="text/javascript">

$("#export_excel").click(function(){
    // 导出中文使用说明,导出的Excel重命名;使用的参数可以自己进入方法查看
    var excel_name = $("#content_info").find("caption").text();
    $('#content_info').tableExport({
            type:'excel',
            fileName: excel_name,
            escape:'false'
        });
});

</script>
</html>

附:tableExport_CN.js
(function($){
    $.fn.extend({
        tableExport: function (options) {
            var defaults = {
                consoleLog: false,
                csvEnclosure: '"',
                csvSeparator: ',',
                csvUseBOM: true,
                displayTableName: false,
                escape: false,
                excelstyles: ['border-bottom', 'border-top', 'border-left', 'border-right'],
                fileName: '默认导出数据标题',
                htmlContent: false,
                ignoreColumn: [],//不导出的列
                ignoreRow: [],//不导出的行
                jspdf: {
                    orientation: 'p',
                    unit: 'pt',
                    format: 'a4',
                    margins: { left: 20, right: 10, top: 10, bottom: 10 },
                    autotable: {
                        padding: 2,
                        lineHeight: 12,
                        fontSize: 8,
                        tableExport: {
                            onAfterAutotable: null,
                            onBeforeAutotable: null,
                            onTable: null
                        }
                    }
                },
                numbers: {
                    html: {
                        decimalMark: '.',
                        thousandsSeparator: ','
                    },
                    output: {
                        decimalMark: '.',
                        thousandsSeparator: ','
                    }
                },
                onCellData: null,
                outputMode: 'file', // file|string|base64
                tbodySelector: 'tr',
                theadSelector: 'tr',
                tableName: 'myTableName',
                type: 'csv',
                worksheetName: 'xlsWorksheetName'
            };


            var el = this;
            var DownloadEvt = null;
            var rowIndex = 0;
            var rowspans = [];
            var trData = '';


            $.extend(true, defaults, options);


            if (defaults.type == 'csv' || defaults.type == 'txt') {


                // Header
                var csvData = "";
                rowIndex = 0;
                $(el).find('thead').first().find(defaults.theadSelector).each(function () {
                    trData = "";
                    ForEachVisibleCell(this, 'th,td', rowIndex,
                            function (cell, row, col) {
                                trData += csvString(cell, row, col) + defaults.csvSeparator;
                            });
                    trData = $.trim(trData).substring(0, trData.length - 1);
                    if (trData.length > 0) {


                        if (csvData.length > 0)
                            csvData += "\n";


                        csvData += trData;
                    }
                    rowIndex++;
                });


                // Row vs Column
                $(el).find('tbody').first().find(defaults.tbodySelector).each(function () {
                    trData = "";
                    ForEachVisibleCell(this, 'th,td', rowIndex,
                            function (cell, row, col) {
                                trData += csvString(cell, row, col) + defaults.csvSeparator;
                            });
                    trData = $.trim(trData).substring(0, trData.length - 1);
                    if (trData.length > 0) {


                        if (csvData.length > 0)
                            csvData += "\n";


                        csvData += trData;
                    }
                    rowIndex++;
                });


                csvData += "\n";


                //output
                if (defaults.consoleLog === true)
                    console.log(csvData);


                if (defaults.outputMode === 'string')
                    return csvData;


                if (defaults.outputMode === 'base64')
                    return base64encode(csvData);


                try {
                    var blob = new Blob([((defaults.type == 'csv' && defaults.csvUseBOM) ? '\ufeff' : '') + csvData], { type: "text/" + (defaults.type == 'csv' ? 'csv' : 'plain') + ";charset=utf-8" });
                    saveAs(blob, defaults.fileName + '.' + defaults.type);
                }
                catch (e) {
                    downloadFile(defaults.fileName + '.' + defaults.type,
                            'data:text/' + (defaults.type == 'csv' ? 'csv' : 'plain') + ';charset=utf-8,' + ((defaults.type == 'csv' && defaults.csvUseBOM) ? '\ufeff' : '') +
                            encodeURIComponent(csvData));
                }


            } else if (defaults.type == 'sql') {


                // Header
                rowIndex = 0;
                var tdData = "INSERT INTO `" + defaults.tableName + "` (";
                $(el).find('thead').first().find(defaults.theadSelector).each(function () {


                    ForEachVisibleCell(this, 'th,td', rowIndex,
                            function (cell, row, col) {
                                tdData += "'" + parseString(cell, row, col) + "',";
                            });
                    rowIndex++;
                    tdData = $.trim(tdData);
                    tdData = $.trim(tdData).substring(0, tdData.length - 1);
                });
                tdData += ") VALUES ";
                // Row vs Column
                $(el).find('tbody').first().find(defaults.tbodySelector).each(function () {
                    trData = "";
                    ForEachVisibleCell(this, 'th,td', rowIndex,
                            function (cell, row, col) {
                                trData += "'" + parseString(cell, row, col) + "',";
                            });
                    if (trData.length > 3) {
                        tdData += "(" + trData;
                        tdData = $.trim(tdData).substring(0, tdData.length - 1);
                        tdData += "),";
                    }
                    rowIndex++;
                });


                tdData = $.trim(tdData).substring(0, tdData.length - 1);
                tdData += ";";


                //output
                if (defaults.consoleLog === true)
                    console.log(tdData);


                if (defaults.outputMode == 'string')
                    return tdData;


                if (defaults.outputMode == 'base64')
                    return base64encode(tdData);


                try {
                    var blob = new Blob([tdData], { type: "text/plain;charset=utf-8" });
                    saveAs(blob, defaults.fileName + '.sql');
                }
                catch (e) {
                    downloadFile(defaults.fileName + '.sql', 'data:application/sql;charset=utf-8,' + encodeURIComponent(tdData));
                }


            } else if (defaults.type == 'json') {


                var jsonHeaderArray = [];
                $(el).find('thead').first().find(defaults.theadSelector).each(function () {
                    var jsonArrayTd = [];


                    ForEachVisibleCell(this, 'th,td', rowIndex,
                            function (cell, row, col) {
                                jsonArrayTd.push(parseString(cell, row, col));
                            });
                    jsonHeaderArray.push(jsonArrayTd);
                });


                var jsonArray = [];
                $(el).find('tbody').first().find(defaults.tbodySelector).each(function () {
                    var jsonArrayTd = [];


                    ForEachVisibleCell(this, 'th,td', rowIndex,
                            function (cell, row, col) {
                                jsonArrayTd.push(parseString(cell, row, col));
                            });


                    if (jsonArrayTd.length > 0 && (jsonArrayTd.length != 1 || jsonArrayTd[0] != ""))
                        jsonArray.push(jsonArrayTd);


                    rowIndex++;
                });


                var jsonExportArray = [];
                jsonExportArray.push({ header: jsonHeaderArray, data: jsonArray });


                var sdata = JSON.stringify(jsonExportArray);


                if (defaults.consoleLog === true)
                    console.log(sdata);


                if (defaults.outputMode == 'string')
                    return sdata;


                var base64data = base64encode(sdata);


                if (defaults.outputMode == 'base64')
                    return base64data;


                try {
                    var blob = new Blob([sdata], { type: "application/json;charset=utf-8" });
                    saveAs(blob, defaults.fileName + '.json');
                }
                catch (e) {
                    downloadFile(defaults.fileName + '.json', 'data:application/json;charset=utf-8;base64,' + base64data);
                }


            } else if (defaults.type === 'xml') {


                rowIndex = 0;
                var xml = '<?xml version="1.0" encoding="utf-8"?>';
                xml += '<tabledata><fields>';


                // Header
                $(el).find('thead').first().find(defaults.theadSelector).each(function () {


                    ForEachVisibleCell(this, 'th,td', rowIndex,
                            function (cell, row, col) {
                                xml += "<field>" + parseString(cell, row, col) + "</field>";
                            });
                    rowIndex++;
                });
                xml += '</fields><data>';


                // Row Vs Column
                var rowCount = 1;
                $(el).find('tbody').first().find(defaults.tbodySelector).each(function () {
                    var colCount = 1;
                    trData = "";
                    ForEachVisibleCell(this, 'th,td', rowIndex,
                            function (cell, row, col) {
                                trData += "<column-" + colCount + ">" + parseString(cell, row, col) + "</column-" + colCount + ">";
                                colCount++;
                            });
                    if (trData.length > 0 && trData != "<column-1></column-1>") {
                        xml += '<row id="' + rowCount + '">' + trData + '</row>';
                        rowCount++;
                    }


                    rowIndex++;
                });
                xml += '</data></tabledata>';


                //output
                if (defaults.consoleLog === true)
                    console.log(xml);


                if (defaults.outputMode == 'string')
                    return xml;


                var base64data = base64encode(xml);


                if (defaults.outputMode == 'base64')
                    return base64data;


                try {
                    var blob = new Blob([xml], { type: "application/xml;charset=utf-8" });
                    saveAs(blob, defaults.fileName + '.xml');
                }
                catch (e) {
                    downloadFile(defaults.fileName + '.xml', 'data:application/xml;charset=utf-8;base64,' + base64data);
                }


            } else if (defaults.type == 'excel' || defaults.type == 'doc') {
                //console.log($(this).html());

                rowIndex = 0;
                var excelData = "<table style='"+$(el).attr("style")+"'>";
//                    excelData += "<caption style='"+$(el).find("caption").attr("style")+"'>" + defaults.fileName + "</caption>";
                excelData += "<h3 style='text-align: center;'>" + defaults.fileName + "</h3>";//caption的样式在execl中无法显示,所以统一用h3代替
                // Header
                $(el).find('thead').first().find(defaults.theadSelector).each(function () {
                    trData = "";
                    ForEachVisibleCell(this, 'th,td', rowIndex,
                            function (cell, row, col) {
                                if (cell != null) {
                                    trData += "<td style='";
                                    for (var styles in defaults.excelstyles) {
                                        if (defaults.excelstyles.hasOwnProperty(styles)) {
                                            trData += defaults.excelstyles[styles] + ": " + $(cell).css(defaults.excelstyles[styles]) + ";";
                                        }
                                    }
                                    trData += "'>" + parseString(cell, row, col) + "</td>";
                                }
                            });
                    if (trData.length > 0)
                        excelData += "<tr>" + trData + '</tr>';
                    rowIndex++;
                });


                // Row Vs Column
                $(el).find('tbody').first().find(defaults.tbodySelector).each(function () {
                    trData = "";
                    ForEachVisibleCell(this, 'th,td', rowIndex,
                            function (cell, row, col) {
                                if (cell != null) {
                                    trData += "<td style='";
                                    for (var styles in defaults.excelstyles) {
                                        if (defaults.excelstyles.hasOwnProperty(styles)) {
                                            trData += defaults.excelstyles[styles] + ": " + $(cell).css(defaults.excelstyles[styles]) + ";";
                                        }
                                    }
                                    if ($(cell).is("[colspan]"))
                                        trData += "' colspan='" + $(cell).attr('colspan');
                                    if ($(cell).is("[rowspan]"))
                                        trData += "' rowspan='" + $(cell).attr('rowspan');
                                    trData += "'>" + parseString(cell, row, col) + "</td>";
                                }
                            });
                    if (trData.length > 0)
                        excelData += "<tr>" + trData + '</tr>';
                    rowIndex++;
                });

//                if (defaults.displayTableName)  //20170401 注释掉if
//                    excelData += "<tr><td></td></tr><tr><td></td></tr><tr><td>" + parseString($('<p>' + defaults.tableName + '</p>')) + "</td></tr>";


                excelData += '</table>';


                if (defaults.consoleLog === true)
                    console.log(excelData);


                var excelFile = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:" + defaults.type + "' xmlns='http://www.w3.org/TR/REC-html40'>";
                excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-' + defaults.type + '; charset=UTF-8">';
                excelFile += '<meta http-equiv="content-type" content="application/';
                excelFile += (defaults.type === 'excel') ? 'vnd.ms-excel' : 'msword';
                excelFile += '; charset=UTF-8">';
                excelFile += "<head>";
                if (defaults.type === 'excel') {
                    excelFile += "<!--[if gte mso 9]>";
                    excelFile += "<xml>";
                    excelFile += "<x:ExcelWorkbook>";
                    excelFile += "<x:ExcelWorksheets>";
                    excelFile += "<x:ExcelWorksheet>";
                    excelFile += "<x:Name>";
                    excelFile += defaults.worksheetName;
                    excelFile += "</x:Name>";
                    excelFile += "<x:WorksheetOptions>";
                    excelFile += "<x:DisplayGridlines/>";
                    excelFile += "</x:WorksheetOptions>";
                    excelFile += "</x:ExcelWorksheet>";
                    excelFile += "</x:ExcelWorksheets>";
                    excelFile += "</x:ExcelWorkbook>";
                    excelFile += "</xml>";
                    excelFile += "<![endif]-->";
                }
                excelFile += "</head>";
                excelFile += "<body>";
                excelFile += excelData;
                excelFile += "</body>";
                excelFile += "</html>";


                if (defaults.outputMode == 'string')
                    return excelFile;


                var base64data = base64encode(excelFile);


                if (defaults.outputMode === 'base64')
                    return base64data;


                var extension = (defaults.type === 'excel') ? 'xls' : 'doc';
                try {
                    var blob = new Blob([excelFile], { type: 'application/vnd.ms-' + defaults.type });
                    saveAs(blob, defaults.fileName + '.' + extension);
                }
                catch (e) {
                    downloadFile(defaults.fileName + '.' + extension, 'data:application/vnd.ms-' + defaults.type + ';base64,' + base64data);
                }


            } else if (defaults.type == 'png') {
                html2canvas($(el), {
                    onrendered: function (canvas) {


                        var image = canvas.toDataURL();
                        image = image.substring(22); // remove data stuff


                        var byteString = atob(image);
                        var buffer = new ArrayBuffer(byteString.length);
                        var intArray = new Uint8Array(buffer);


                        for (var i = 0; i < byteString.length; i++)
                            intArray[i] = byteString.charCodeAt(i);


                        try {
                            var blob = new Blob([buffer], { type: "image/png" });
                            saveAs(blob, defaults.fileName + '.png');
                        }
                        catch (e) {
                            downloadFile(defaults.fileName + '.png', 'data:image/png;base64,' + image);
                        }
                    }
                });


            } else if (defaults.type == 'pdf') {
                if (defaults.jspdf.autotable === false) {
                    var addHtmlOptions = {
                        dim: {
                            w: getPropertyUnitValue($(el).first().get(0), 'width', 'mm'),
                            h: getPropertyUnitValue($(el).first().get(0), 'height', 'mm')
                        },
                        pagesplit: false
                    };


                    var doc = new jsPDF(defaults.jspdf.orientation, defaults.jspdf.unit, defaults.jspdf.format);
                    doc.addHTML($(el).first(),
                            defaults.jspdf.margins.left,
                            defaults.jspdf.margins.top,
                            addHtmlOptions,
                            function () {
                                jsPdfOutput(doc);
                            });
                    //delete doc;
                }
                else {
                    // pdf output using jsPDF AutoTable plugin
                    // https://github.com/someatoms/jsPDF-AutoTable


                    var teOptions = defaults.jspdf.autotable.tableExport;


                    // When setting jspdf.format to 'bestfit' tableExport tries to choose
                    // the minimum required paper format and orientation in which the table
                    // (or tables in multitable mode) completely fit without column adjustment
                    if (typeof defaults.jspdf.format === 'string' && defaults.jspdf.format.toLowerCase() === 'bestfit') {
                        var pageFormats = {
                            'a0': [2383.94, 3370.39], 'a1': [1683.78, 2383.94],
                            'a2': [1190.55, 1683.78], 'a3': [841.89, 1190.55],
                            'a4': [595.28, 841.89]
                        };
                        var rk = '', ro = '';
                        var mw = 0;


                        $(el).filter(':visible').each(function () {
                            if ($(this).css('display') != 'none') {
                                var w = getPropertyUnitValue($(this).get(0), 'width', 'pt');


                                if (w > mw) {
                                    if (w > pageFormats['a0'][0]) {
                                        rk = 'a0';
                                        ro = 'l';
                                    }
                                    for (var key in pageFormats) {
                                        if (pageFormats.hasOwnProperty(key)) {
                                            if (pageFormats[key][1] > w) {
                                                rk = key;
                                                ro = 'l';
                                                if (pageFormats[key][0] > w)
                                                    ro = 'p';
                                            }
                                        }
                                    }
                                    mw = w;
                                }
                            }
                        });
                        defaults.jspdf.format = (rk == '' ? 'a4' : rk);
                        defaults.jspdf.orientation = (ro == '' ? 'w' : ro);
                    }


                    // The jsPDF doc object is stored in defaults.jspdf.autotable.tableExport,
                    // thus it can be accessed from any callback function from below
                    teOptions.doc = new jsPDF(defaults.jspdf.orientation,
                            defaults.jspdf.unit,
                            defaults.jspdf.format);


                    $(el).filter(':visible').each(function () {
                        if ($(this).css('display') != 'none') {
                            var colKey;
                            var rowIndex = 0;
                            var atOptions = {};


                            teOptions.columns = [];
                            teOptions.rows = [];
                            teOptions.rowoptions = {};


                            // onTable: optional callback function for every matching table that can be used
                            // to modify the tableExport options or to skip the output of a particular table
                            // when the  table selector targets multiple tables
                            if (typeof teOptions.onTable === 'function')
                                if (teOptions.onTable($(this), defaults) === false)
                                    return true; // continue to next iteration step (table)


                            // each table works with an own copy of AutoTable options
                            Object.keys(defaults.jspdf.autotable).forEach(function (key) {
                                atOptions[key] = defaults.jspdf.autotable[key];
                            });
                            atOptions.margins = {};
                            $.extend(true, atOptions.margins, defaults.jspdf.margins);


                            if (typeof atOptions.renderCell !== 'function') {


                                // draw cell text with original <td> alignment
                                atOptions.renderCell = function (x, y, width, height, key, value, row, settings) {
                                    var doc = settings.tableExport.doc;
                                    var xoffset = 0;


                                    doc.setFillColor(row % 2 === 0 ? 245 : 255);
                                    doc.setTextColor(50);
                                    doc.rect(x, y, width, height, 'F');
                                    y += settings.lineHeight / 2 + doc.autoTableTextHeight() / 2 - 2.5;


                                    if (typeof settings.tableExport.columns[key] != 'undefined') {
                                        var col = settings.tableExport.columns[key];
                                        if (typeof col.style != 'undefined') {
                                            var alignment = col.style.align;
                                            var rowopt = settings.tableExport.rowoptions[(row + 1) + ":" + key];


                                            if (typeof rowopt != 'undefined')
                                                alignment = rowopt.style.align;


                                            if (alignment == 'right')
                                                xoffset = width - doc.getStringUnitWidth(('' + value)) * doc.internal.getFontSize() - settings.padding;
                                            else if (alignment == 'center')
                                                xoffset = (width - doc.getStringUnitWidth(('' + value)) * doc.internal.getFontSize()) / 2;
                                        }
                                    }


                                    if (xoffset < settings.padding)
                                        xoffset = settings.padding;


                                    doc.text(value, x + xoffset, y);
                                }
                            }


                            // collect header and data rows
                            $(this).find('thead').find(defaults.theadSelector).each(function () {
                                colKey = 0;


                                ForEachVisibleCell(this, 'th,td', rowIndex,
                                        function (cell, row, col) {
                                            var obj = {
                                                title: parseString(cell, row, col),
                                                key: colKey++,
                                                style: {
                                                    align: getStyle(cell, 'text-align'),
                                                    bcolor: getStyle(cell, 'background-color')
                                                }
                                            };
                                            teOptions.columns.push(obj);
                                        });
                                rowIndex++;
                            });


                            $(this).find('tbody').find(defaults.tbodySelector).each(function () {
                                var rowData = [];
                                var rowCount = 0;
                                colKey = 0;


                                ForEachVisibleCell(this, 'th,td', rowIndex,
                                        function (cell, row, col) {
                                            var obj = {
                                                style: {
                                                    align: getStyle(cell, 'text-align'),
                                                    bcolor: getStyle(cell, 'background-color')
                                                }
                                            };
                                            teOptions.rowoptions[rowCount + ":" + colKey++] = obj;


                                            rowData.push(parseString(cell, row, col));
                                        });
                                if (rowData.length) {
                                    teOptions.rows.push(rowData);
                                    rowCount++
                                }
                                rowIndex++;
                            });


                            // onBeforeAutotable: optional callback function before calling
                            // jsPDF AutoTable that can be used to modify the AutoTable options
                            if (typeof teOptions.onBeforeAutotable === 'function')
                                teOptions.onBeforeAutotable($(this), teOptions.columns, teOptions.rows, atOptions);


                            teOptions.doc.autoTable(teOptions.columns, teOptions.rows, atOptions);


                            // onAfterAutotable: optional callback function after returning
                            // from jsPDF AutoTable that can be used to modify the AutoTable options
                            if (typeof teOptions.onAfterAutotable === 'function')
                                teOptions.onAfterAutotable($(this), atOptions);


                            // set the start position for the next table (in case there is one)
                            defaults.jspdf.autotable.startY = teOptions.doc.autoTableEndPosY() + atOptions.margins.top;
                        }
                    });


                    jsPdfOutput(teOptions.doc);


                    teOptions.columns.length = 0;
                    teOptions.rows.length = 0;
                    delete teOptions.doc;
                    teOptions.doc = null;
                }
            }


            function ForEachVisibleCell(tableRow, selector, rowIndex, cellcallback) {
                if (defaults.ignoreRow.indexOf(rowIndex) == -1) {
                    $(tableRow).filter(':visible').find(selector).each(function (colIndex) {
                        if ($(this).data("tableexport-display") == 'always' ||
                            ($(this).css('display') != 'none' &&
                             $(this).css('visibility') != 'hidden' &&
                             $(this).data("tableexport-display") != 'none')) {
                            if (defaults.ignoreColumn.indexOf(colIndex) == -1) {
                                if (typeof (cellcallback) === "function") {
                                    var cs = 0; // colspan value


                                    // handle previously detected rowspans
                                    if (typeof rowspans[rowIndex] != 'undefined' && rowspans[rowIndex].length > 0) {
                                        for (c = 0; c <= colIndex; c++) {
                                            if (typeof rowspans[rowIndex][c] != 'undefined') {
                                                cellcallback(null, rowIndex, c);
                                                delete rowspans[rowIndex][c];
                                                colIndex++;
                                            }
                                        }
                                    }


                                    // output content of current cell
                                    cellcallback(this, rowIndex, colIndex);


                                    // handle colspan of current cell
                                    if ($(this).is("[colspan]")) {
                                        cs = $(this).attr('colspan');
                                        for (c = 0; c < cs - 1; c++)
                                            cellcallback(null, rowIndex, colIndex + c);
                                    }


                                    // store rowspan for following rows
                                    if ($(this).is("[rowspan]")) {
                                        var rs = parseInt($(this).attr('rowspan'));


                                        for (r = 1; r < rs; r++) {
                                            if (typeof rowspans[rowIndex + r] == 'undefined')
                                                rowspans[rowIndex + r] = [];
                                            rowspans[rowIndex + r][colIndex] = "";


                                            for (c = 1; c < cs; c++)
                                                rowspans[rowIndex + r][colIndex + c] = "";
                                        }
                                    }
                                }
                            }
                        }
                    });
                }
            }


            function jsPdfOutput(doc) {
                if (defaults.consoleLog === true)
                    console.log(doc.output());


                if (defaults.outputMode == 'string')
                    return doc.output();


                if (defaults.outputMode == 'base64')
                    return base64encode(doc.output());


                try {
                    var blob = doc.output('blob');
                    saveAs(blob, defaults.fileName + '.pdf');
                }
                catch (e) {
                    downloadFile(defaults.fileName + '.pdf', 'data:application/pdf;base64,' + base64encode(doc.output()));
                }
            }


            function escapeRegExp(string) {
                return string.replace(/([.*+?^=!:${}()|\/\\])/g, "\\$1");
            }


            function replaceAll(string, find, replace) {
                return string.replace(new RegExp(escapeRegExp(find), 'g'), replace);
            }


            function csvString(cell, rowIndex, colIndex) {
                var result = '';


                if (cell != null) {
                    var dataString = parseString(cell, rowIndex, colIndex);


                    var csvValue = (dataString === null || dataString == '') ? '' : dataString.toString();


                    if (dataString instanceof Date)
                        result = defaults.csvEnclosure + dataString.toLocaleString() + defaults.csvEnclosure;
                    else {
                        result = replaceAll(csvValue, defaults.csvEnclosure, defaults.csvEnclosure + defaults.csvEnclosure);


                        if (result.indexOf(defaults.csvSeparator) >= 0 || /[\r\n ]/g.test(result))
                            result = defaults.csvEnclosure + result + defaults.csvEnclosure;
                    }
                }


                return result;
            }


            function parseNumber(value) {
                value = value || "0";
                value = replaceAll(value, defaults.numbers.html.decimalMark, '.');
                value = replaceAll(value, defaults.numbers.html.thousandsSeparator, '');


                return typeof value === "number" || jQuery.isNumeric(value) !== false ? value : false;
            }


            function parseString(cell, rowIndex, colIndex) {
                var result = '';


                if (cell != null) {
                    var $cell = $(cell);


                    if (defaults.htmlContent === true) {
                        result = $cell.html().trim();
                    }
                    else {
                        result = $cell.text().trim().replace(/\u00AD/g, ""); // remove soft hyphens


                        if (defaults.numbers.html.decimalMark != defaults.numbers.output.decimalMark ||
                            defaults.numbers.html.thousandsSeparator != defaults.numbers.output.thousandsSeparator) {
                            var number = parseNumber(result);


                            if (number !== false) {
                                var frac = ("" + number).split('.');
                                if (frac.length == 1)
                                    frac[1] = "";
                                var mod = frac[0].length > 3 ? frac[0].length % 3 : 0;


                                result = (number < 0 ? "-" : "") +
                                         (defaults.numbers.output.thousandsSeparator ? ((mod ? frac[0].substr(0, mod) + defaults.numbers.output.thousandsSeparator : "") + frac[0].substr(mod).replace(/(\d{3})(?=\d)/g, "$1" + defaults.numbers.output.thousandsSeparator)) : frac[0]) +
                                         (frac[1].length ? defaults.numbers.output.decimalMark + frac[1] : "");
                            }
                        }
                    }


                    if (defaults.escape === true) {
                        result = escape(result);
                    }


                    if (typeof defaults.onCellData === 'function') {
                        result = defaults.onCellData($cell, rowIndex, colIndex, result);
                    }
                }


                return result;
            }


            function hyphenate(a, b, c) {
                return b + "-" + c.toLowerCase();
            }


            // get computed style property
            function getStyle(target, prop) {
                try {
                    if (window.getComputedStyle) { // gecko and webkit
                        prop = prop.replace(/([a-z])([A-Z])/, hyphenate);  // requires hyphenated, not camel
                        return window.getComputedStyle(target, null).getPropertyValue(prop);
                    }
                    if (target.currentStyle) { // ie
                        return target.currentStyle[prop];
                    }
                    return target.style[prop];
                }
                catch (e) {
                }
                return "";
            }


            function getPropertyUnitValue(target, prop, unit) {
                var baseline = 100;  // any number serves


                var value = getStyle(target, prop);  // get the computed style value


                var numeric = value.match(/\d+/);  // get the numeric component
                if (numeric !== null) {
                    numeric = numeric[0];  // get the string


                    var temp = document.createElement("div");  // create temporary element
                    temp.style.overflow = "hidden";  // in case baseline is set too low
                    temp.style.visibility = "hidden";  // no need to show it


                    target.parentElement.appendChild(temp); // insert it into the parent for em, ex and %


                    temp.style.width = baseline + unit;
                    var factor = baseline / temp.offsetWidth;


                    target.parentElement.removeChild(temp);  // clean up


                    return (numeric * factor);
                }
                return 0;
            }


            function downloadFile(filename, data) {
                var DownloadLink = document.createElement('a');


                if (DownloadLink) {
                    document.body.appendChild(DownloadLink);
                    DownloadLink.style = 'display: none';
                    DownloadLink.download = filename;
                    DownloadLink.href = data;


                    if (document.createEvent) {
                        if (DownloadEvt == null)
                            DownloadEvt = document.createEvent('MouseEvents');


                        DownloadEvt.initEvent('click', true, false);
                        DownloadLink.dispatchEvent(DownloadEvt);
                    }
                    else if (document.createEventObject)
                        DownloadLink.fireEvent('onclick');
                    else if (typeof DownloadLink.onclick == 'function')
                        DownloadLink.onclick();


                    document.body.removeChild(DownloadLink);
                }
            }


            function utf8Encode(string) {
                string = string.replace(/\x0d\x0a/g, "\x0a");
                var utftext = "";
                for (var n = 0; n < string.length; n++) {
                    var c = string.charCodeAt(n);
                    if (c < 128) {
                        utftext += String.fromCharCode(c);
                    }
                    else if ((c > 127) && (c < 2048)) {
                        utftext += String.fromCharCode((c >> 6) | 192);
                        utftext += String.fromCharCode((c & 63) | 128);
                    }
                    else {
                        utftext += String.fromCharCode((c >> 12) | 224);
                        utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                        utftext += String.fromCharCode((c & 63) | 128);
                    }
                }
                return utftext;
            }


            function base64encode(input) {
                var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
                var output = "";
                var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
                var i = 0;
                input = utf8Encode(input);
                while (i < input.length) {
                    chr1 = input.charCodeAt(i++);
                    chr2 = input.charCodeAt(i++);
                    chr3 = input.charCodeAt(i++);
                    enc1 = chr1 >> 2;
                    enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
                    enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
                    enc4 = chr3 & 63;
                    if (isNaN(chr2)) {
                        enc3 = enc4 = 64;
                    } else if (isNaN(chr3)) {
                        enc4 = 64;
                    }
                    output = output +
                            keyStr.charAt(enc1) + keyStr.charAt(enc2) +
                            keyStr.charAt(enc3) + keyStr.charAt(enc4);
                }
                return output;
            }


            return this;
        }
    });
})(jQuery);

附2:jquery.base64.js

jQuery.base64 = ( function( $ ) {
  
  var _PADCHAR = "=",
    _ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
    _VERSION = "1.0";


  function _getbyte64( s, i ) {
    // This is oddly fast, except on Chrome/V8.
    // Minimal or no improvement in performance by using a
    // object with properties mapping chars to value (eg. 'A': 0)

    var idx = _ALPHA.indexOf( s.charAt( i ) );

    if ( idx === -1 ) {
      throw "Cannot decode base64";
    }

    return idx;
  }
  
  
  function _decode( s ) {
    var pads = 0,
      i,
      b10,
      imax = s.length,
      x = [];

    s = String( s );
    
    if ( imax === 0 ) {
      return s;
    }

    if ( imax % 4 !== 0 ) {
      throw "Cannot decode base64";
    }

    if ( s.charAt( imax - 1 ) === _PADCHAR ) {
      pads = 1;

      if ( s.charAt( imax - 2 ) === _PADCHAR ) {
        pads = 2;
      }

      // either way, we want to ignore this last block
      imax -= 4;
    }

    for ( i = 0; i < imax; i += 4 ) {
      b10 = ( _getbyte64( s, i ) << 18 ) | ( _getbyte64( s, i + 1 ) << 12 ) | ( _getbyte64( s, i + 2 ) << 6 ) | _getbyte64( s, i + 3 );
      x.push( String.fromCharCode( b10 >> 16, ( b10 >> 8 ) & 0xff, b10 & 0xff ) );
    }

    switch ( pads ) {
      case 1:
        b10 = ( _getbyte64( s, i ) << 18 ) | ( _getbyte64( s, i + 1 ) << 12 ) | ( _getbyte64( s, i + 2 ) << 6 );
        x.push( String.fromCharCode( b10 >> 16, ( b10 >> 8 ) & 0xff ) );
        break;

      case 2:
        b10 = ( _getbyte64( s, i ) << 18) | ( _getbyte64( s, i + 1 ) << 12 );
        x.push( String.fromCharCode( b10 >> 16 ) );
        break;
    }

    return x.join( "" );
  }
  
  
  function _getbyte( s, i ) {
    var x = s.charCodeAt( i );

    if ( x > 255 ) {
      throw "INVALID_CHARACTER_ERR: DOM Exception 5";
    }
    
    return x;
  }


  function _encode( s ) {
    if ( arguments.length !== 1 ) {
      throw "SyntaxError: exactly one argument required";
    }

    s = String( s );

    var i,
      b10,
      x = [],
      imax = s.length - s.length % 3;

    if ( s.length === 0 ) {
      return s;
    }

    for ( i = 0; i < imax; i += 3 ) {
      b10 = ( _getbyte( s, i ) << 16 ) | ( _getbyte( s, i + 1 ) << 8 ) | _getbyte( s, i + 2 );
      x.push( _ALPHA.charAt( b10 >> 18 ) );
      x.push( _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) );
      x.push( _ALPHA.charAt( ( b10 >> 6 ) & 0x3f ) );
      x.push( _ALPHA.charAt( b10 & 0x3f ) );
    }

    switch ( s.length - imax ) {
      case 1:
        b10 = _getbyte( s, i ) << 16;
        x.push( _ALPHA.charAt( b10 >> 18 ) + _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) + _PADCHAR + _PADCHAR );
        break;

      case 2:
        b10 = ( _getbyte( s, i ) << 16 ) | ( _getbyte( s, i + 1 ) << 8 );
        x.push( _ALPHA.charAt( b10 >> 18 ) + _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) + _ALPHA.charAt( ( b10 >> 6 ) & 0x3f ) + _PADCHAR );
        break;
    }

    return x.join( "" );
  }


  return {
    decode: _decode,
    encode: _encode,
    VERSION: _VERSION
  };
      
}( jQuery ) );

转载于:https://my.oschina.net/wugong/blog/872909

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值