jquery .html() 仅从handsontable返回一些行

Posted

技术标签:

【中文标题】jquery .html() 仅从handsontable返回一些行【英文标题】:jquery .html() is only returning some rows from a handsontable 【发布时间】:2016-02-08 03:05:53 【问题描述】:

我有一个包含不到 100 行数据和 9 列的实践表。我添加了一个按钮,可以将handsontable中的数据直接导出到Excel。该按钮功能有效,单击时将下载可以打开的 Excel 文件。该文件具有所有正确的格式,但它仅包含 handsontable 中的 30-40 行数据。在单击导出按钮之前在表格中向下滚动会导致结果中多出几行,但它永远不会返回所有数据。

相关的jquery代码可以看这里:

var tableContainer = document.getElementById('table');
tableHandson = new Handsontable(tableContainer, 
    minSpareRows: 0,
    columnSorting: true,
    stretchH: 'all',
    readOnly: true
);
//ajax call to get data and then load it is here.
$(window).load(function() 
$("#btnExport").click(function(e) 
    window.open('data:application/vnd.ms-excel,' + encodeURIComponent($('#table').html()));
    e.preventDefault();
);
);

.text() 也只返回与 .html 在此处返回的相同数量的数据。

【问题讨论】:

【参考方案1】:

您似乎正在尝试通过 URL 发送内容?

您可以为 URL 提供的字符数量通常有一个最大长度,这通常取决于浏览器。

您可以在此处找到有关约束的更详细概述:

What is the maximum length of a URL in different browsers?

您能否改为将数据发布到页面并让一些服务器端代码处理输出具有正确内容类型的数据?

【讨论】:

【参考方案2】:

您看到的是 HOT 用来加速表性能的虚拟渲染。您可以在这些其他 SO 答案中了解更多信息:

Virtual Rendering Browser "find" not working IE performance and VR

看看你在做什么是试图从 DOM 中抓取你不应该做的数据。这将导致仅返回视口。相反,您应该使用hot.getData() 方法解析您自己的数据。

【讨论】:

感谢您的链接。这是有道理的。但是,我用 tableHandson.getData() 替换上述代码的 .html() 部分的任何尝试都没有成功。它不能单独工作,也不能在 encodeURIComponent() 函数内部工作。有什么建议吗? 当然不是。你不能这样打开它,因为你得到的是你的数据对象(你应该顺便传入它)。你到底想做什么?如果您想将数据下载为“csv”文件,则需要采取其他步骤来正确格式化数据,所有步骤都高度依赖于该对象的外观。 我正在尝试获取handsontable 的内容并在Excel 中显示它们。这可能意味着将内容保存为 csv 或任何其他方法。使用 .html(),下载一个文件,该文件在 Excel 中打开,其中包含数据和表格格式。不过,格式化不是必需的。 是的,所以我建议您通过控制台记录hot.getData() 的输出,并查看“如何将 json 数据导出为 CSV”的其他 SO 答案。

以上是关于jquery .html() 仅从handsontable返回一些行的主要内容,如果未能解决你的问题,请参考以下文章

jquery + handsontable:没有方法'on' [关闭]

Handsontable:jquery 合并标题,水平滚动错误

如何使用 jQuery 将数据从 PHP 加载到 Handsontable?

我无法使用带有 jquery 的 Handsontable 加载数据

怎么用jquery调用Handsontable的js里的方法

特定列上的 Jquery Handsontable 排序