【发布时间】:2019-07-25 22:22:19
【问题描述】:
我制作了一张表格,但我使用的是<div>s 而不是<tr>s 和<td>s。这是一个例子:
<div class="tbl tbl1">
<div class="thead">
<div class="tr">
<div class="td colTitle" style="width: 120px"><span>Title</span></div>
<div class="td colLink" style="width: 190px"><span>Link</span></div>
<div class="td colSize numeric" style="width: 75px"><span>Size(MB)</span></div>
<div class="td colUploadDate" style="width: 75px"><span>UploadDate</span></div>
<div class="td colOpen" style="width: 50px; max-width: 50px;"><span>Show</span></div>
</div>
<div class="tr">
<div class="td colTitle">
<input type="text" class="Filter" />
</div>
<div class="td colLink">
<input type="text" class="Filter" />
</div>
<div class="td colSize">
<input type="text" class="Filter" />
</div>
<div class="td colUploadDate">
<input type="text" class="Filter" />
</div>
<div class="td colOpen">
</div>
</div>
</div>
<div class="tbody">
</div>
</div>
我将用 ajax 函数填充tbody。从数据库中获取所有数据后,我将其存储到客户端的数组中。我使用下面的代码使用数组arr 填充我的表。但是当我有大量行时,在我的表中显示行需要很长时间。
var res = "";
arr.forEach(function (row) {
res += "<div class='tr' idattachment='" + row["IdAttachment"] + "' >" +
"<div class='td colTitle'>" + row["Title"] + "</div>" +
"<div class='td colLink'>" + row["Name"] + "</div>" +
"<div class='td colSize'>" + (row["Size"] / (1024 * 1024)).toFixed(2) + "</div>" +
"<div class='td colUploadDate'>" + row["UploadDate"] + "</div>" +
"<div class='td colOpen'><a class='link' href='uploads/" + row["Name"] + "'>Open</a></div>" +
"</div>";
});
$(".tbody").html(res);
有没有更高效的方式将数据加载到表中?
【问题讨论】:
-
您应该考虑使用模板引擎和/或分页。
-
我不想使用分页选项。
-
如何“逐行”执行,中间稍作延迟?这样加载时间会更长,但不会冻结。
-
鉴于您将所有 html 构建到一个字符串中并且只执行一个追加,如果这需要“很长时间”才能显示,这反映了您尝试的数据量显示
-
如果你真的需要展示一个巨大的表格,首先,放弃jQuery,使用HTMLTable Interface,它已经被优化为处理表格。避免向表格元素添加类或 ID,或者实际上是任何属性。还要避免繁重的样式,使用
colgroup/col元素和/或样式表(nth-child选择器)来设置元素的样式。您可以测试 documentFragment 追加行和单元格是否比直接在页面上追加更快,或者尝试追加到display:none表,您可以在它准备好后显示。
标签: javascript jquery html arrays