什么'这是用javascript隐藏和显示表中所有行的最快方法
What's the fastest way of hiding and showing all the rows of a table in javascript?
我正在构建一个用于查询html表(10k行以上)的过滤器。我最初的想法是首先隐藏所有行,然后取消隐藏与特定查询匹配的行。如果过滤器已删除,则显示所有行。
这是编写隐藏/显示所有行函数的最佳方式吗?
// optimize this!
this.hideAllRows = function() {
nodes = document.getElementById('table_body').children
for(var i=0, i_max=nodes.length; i<i_max; i++) {
nodes[i].style.display="none"
}
}
// optimize this!
this.showAllRows = function() {
nodes = document.getElementById('table_body').children
for(var i=0, i_max=nodes.length; i<i_max; i++) {
nodes[i].style.display=""
}
}
谢谢!
一种解决方案是实现分页或"无限"滚动功能。这将消除同时渲染10k个dom元素的需要。您可以在用户滚动时批量呈现它们,或者将它们分块到页面中。
或者,您可以尝试将表从dom中拉出,隐藏行,然后重新插入。这将防止不必要的回流/绘制等。
根据经验,使用纯javascript for
循环比使用jQuery .each()
更快,但使用.getElementById()
和.children
属性的基本选择已经得到了很好的优化。
然而,在浏览器中迭代10k以上的元素总是很慢。显示和隐藏元素最适合100年代而不是1000年代的唱片集。
为什么不发出AJAX请求,返回已经格式化为<tr>...some <td>s here....</tr><tr>...some <td>s here....</tr>
的数据(可能来自数据库)?
这样,当涉及到过滤时,您可以让数据库承担所有繁重的工作,它们经过了优化。它使您的代码保持简单,带宽减少,DOM操作保持在最低限度。
只要您想应用筛选器,就可以发出$.ajax
请求。
function filter(criteria){
$.ajax({
url : myDataUrl,
type : "POST",
data : {criteria : criteria}
})
.success(function (data){
$("#table-body").html(data);
});
}
相关文章:
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 用HTML在不同屏幕上显示和隐藏内容的方法
- 显示指令时调用指令方法
- Push方法显示错误
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 设置显示后Flash对象方法不可用:无
- 重置transform:rotate(),方法是移除并追加在追加和重绘图表后未显示数据的画布
- 什么'这是用javascript隐藏和显示表中所有行的最快方法
- ng显示“;调用方法“;不起作用
- 使用Ajax Get方法将数据显示到特定元素中
- JS方法显示了未定义的简单示例
- 在上下文菜单项单击上显示侧边栏/弹出窗口的最佳方法是什么
- 为什么参数对象没有在控制台中显示它的方法
- 如何通过MVC操作方法显示/隐藏HTML按钮
- 请求方法显示选项而不是开机自检
- 冻结/暂停的方法 显示外汇数据流的 UI 图表
- html/javascript如何用点击按钮的方法显示用户输入
- 是否有任何方法显示工具提示默认(没有悬停饼图)在chartjs
- 如何使用jquery的append方法显示两个javascript变量
- 是否有一个HTML5的方法显示tiff图像数据已经加载到内存