javascript - 使用jquery以最优化的方式复制表格的一部分

标签 javascript jquery

我正在使用 JQuery 来操作我无权修改服务器端的页面。我需要做的主要事情之一是创建页面上其中一个表格的一个子部分的副本。更具体地说,我需要创建 2 个表,一个是表前两行的副本,另一个是第一列。

在尽可能优化之后,我对行复制的性能相当满意,但列复制仍然有点慢。

我有以下内容,其中 sourceTable 是原始表,titleColBody 是之前创建的新表的主体:

sourceTable.find("tr").each(function(){
   titleColBody.append(
      $("<tr></tr>").append($(this).children(":first").clone())
   );
});

在一个大约有 50 行和大量列的表上,这大约需要在 IE8 中为 350 毫秒。并不可怕,但如果可能的话,我想降低一点。

我的问题是在 JQuery 中是否有更有效的方法。

同样,我创建了表格前两行的副本,如下所示。

headerTable.find("tbody")
   .append(sourceTable.find("tr:eq(0)").clone())
   .append(sourceTable.find("tr:eq(1)").clone());

这相当快,但是如果有更好的方法,我会很高兴听到。

任何优化都将不胜感激。

最佳答案

看起来这对于列来说可能会快一点,这样您将只获取一个资源集而不是获取两组(一组用于 TR,然后一组用于子 TD):

sourceTable.find("tr > td:first-child").each(function(){
    titleColBody.append($("<tr></tr>").append($(this).clone()));
});

另请注意,如果“titleColBody”是指向 DOM 对象的指针,导致浏览器在更新时必须呈现页面,则最好附加到 documentFragment,然后附加该片段(因此浏览器只会重新呈现一次)。

例如:

var titleCol = document.createDocumentFragment();
sourceTable.find("tr > td:first-child").each(function(){
    titleCol.append($("<tr></tr>").append($(this).clone()));
});
titleColBody.append(titleCol);

关于javascript - 使用jquery以最优化的方式复制表格的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5732715/

相关文章:

javascript - 如何让函数 initMap() 在其执行之间等待?

javascript - 在 Chrome 18 中检测 SwiftShader WebGL 渲染器

javascript - JavaScript 可以判断 Firefox 中是否启用了跟踪保护吗?

jquery - DIV 向左定位

javascript - 在 React 中的 .map 迭代中的单个元素上使用 onMouseEnter

javascript - 在 Web Worker 中使用 'Google Maps API'

jquery - 如何使用jquery重写这个函数

javascript - Ajax 调用以消耗本地主机上的剩余服务

javascript - 具有多个条件的 Jquery 过滤器

javascript - 有没有办法将 2 个或多个执行类似操作的事件组合起来以使用 DRY 原则