javascript - 使用 jQuery 即时构建 HTML 表格

标签 javascript jquery

下面是我用来动态构建 HTML 表格的代码(使用从服务器接收的 JSON 数据)。

加载数据时,我会显示动画请稍候 (.gif) 图形。但是,当 JavaScript 函数构建表格时,图形会卡住。起初,我只是很高兴能够实现这一点(显示表格),我想现在我需要提高效率。至少我需要阻止动画图形卡住。我可以进入静态“正在加载”显示,但我宁愿让这个方法起作用。

对我的“请稍候”显示有何建议?还有效率?可能是构建表格的更好方法?或者可能不是表格,而是其他一些“表格”,例如显示

var t = eval( "(" + request + ")" ) ;
var myTable = '' ;
myTable += '<table id="myTable" cellspacing=0 cellpadding=2 border=1>' ;
myTable +=  "<thead>" ;
myTable +=   "<tr>";
for (var i = 0; i < t.hdrs.length; i++) {
    myTable +=    "<th>"     + header +       "</th>";
}
myTable +=   "</tr>" ;
myTable +=  "</thead>" ;
myTable +=  "<tbody>" ;

for (var i = 0; i < t.data.length; i++) {
    myTable +=    '<tr>';
    for (var j = 0; j < t.hdrs.length; j++) {
        myTable += '<td>';
        if (t.data[i][t.hdrs[j]] == "") {
            myTable += "&nbsp;" ;
        }
        else {
            myTable += t.data[i][t.hdrs[j]] ;
        }
        myTable += "</td>";
    }
    myTable +=    "</tr>";
}
myTable +=  "</tbody>" ;
myTable += "</table>" ;

$("#result").append(myTable) ;
$("#PleaseWaitGraphic").addClass("hide");
$(".rslt").removeClass("hide") ;

最佳答案

您基本上想要设置循环,以便它们经常让步给其他线程。以下是 this article 中的一些示例代码关于在不卡住 UI 的情况下运行 CPU 密集型操作的主题:

function doSomething (progressFn [, additional arguments]) {
    // Initialize a few things here...
    (function () {
        // Do a little bit of work here...
        if (continuation condition) {
            // Inform the application of the progress
            progressFn(value, total);
            // Process next chunk
            setTimeout(arguments.callee, 0);
        }
    })();
}

就简化脚本中 HTML 的生成而言,如果您使用 jQuery,您可能会给我的 Simple Templates插件试试。它通过大幅减少必须执行的串联次数来简化流程。在我最近进行了一些重构之后,它的性能也非常好,导致了相当大的 speed increase 。这是一个示例(无需为您完成所有工作!):<​​/p>

var t = eval('(' + request + ')') ;
var templates = {
    tr : '<tr>#{row}</tr>',
    th : '<th>#{header}</th>',
    td : '<td>#{cell}</td>'
};
var table = '<table><thead><tr>';
$.each(t.hdrs, function (key, val) {
    table += $.tmpl(templates.th, {header: val});
});
...

关于javascript - 使用 jQuery 即时构建 HTML 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/103489/

相关文章:

javascript - $.get 响应没有 responseJSON 方法,但是当我在 Chrome 开发工具中绑定(bind)它时,它有吗?

javascript - 在动态元素(Backbone)中调用ajax后,单击功能不起作用

javascript - 'without' 函数在集合上做什么?

javascript - jQuery 从顶部获取当前 View 位置

javascript - Leaflet 的脉冲动画有奇怪的行为 [包括 GIF]

jQuery 查找并 append 元素

JavaScript 事件命令返回不同的值

jquery - 仅当自动宽度大于当前宽度时才更改元素(选择框)的宽度-jquery

javascript - 切换页面高度的显示条件

javascript - 似乎无法模拟 jQuery 链接点击