javascript - jQuery 浏览器在向 div 添加大量行时会卡住

标签 javascript jquery browser

当我需要通过 jQuery 函数append() 添加大约 2000 个元素时,浏览器会卡住,并且似乎一切都卡住了一段时间。

这是因为 jQuery 本身的问题还是......我的编码方面有任何逻辑问题? 我正在做的事情如下:

for (var i=0; data.length; i++) {
  add_elem(data[i]);
}

function add_elem(data) {
  $("#wrapper").append('<div class="row" id="elem_' + data['id'] + '>' + data['htmlv'] + '</div>');
  uniform_elem($('#elem_' + data['id']));
}

uniform_elem() 有一些 ui 处理,使事情看起来不错。

有什么好主意吗?

最佳答案

不要在循环中调用 add_elem,而是在循环数据变量时将元素的所有 html 存储在单个变量中,然后通过传入新变量来调用 add_elem。

var elements = "";

// Store all elements in the loop
for (var i=0; data.length; i++) {
  elements+= '<div class="row" id="elem_' + data['id'] + '>' + data['htmlv'] + '</div>';
}

// Invoke add_elem once and only once using the new elements var
add_elem(elements);

function add_elem(data) {
  // Append once to the DOM
  $("#wrapper").append(data);
  for (var j=0; data.length; j++) {
    uniform_elem($('#elem_' + data['id']));
  }
}

关于javascript - jQuery 浏览器在向 div 添加大量行时会卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41350574/

相关文章:

jquery - 编译指令导致错误 : $apply already in progress

javascript - 浏览器控制台错误 : Invalid character: '@'

browser - 如何拦截来自 Chromium 浏览器的 Skia 绘图命令

javascript - 为什么替换构造函数的原型(prototype)没有反射(reflect)在对象中?

javascript - CryptoJs 的 decrypt 方法返回一个空字符串

Javascript 生成的内容未缓存 Ratchet v2.0.2

html - 在顶部放置 1 个标签,在底部放置 1 个输入,在左侧放置 2 个按钮

javascript - 如何使用 Id 销毁 Canvas 并将新 Canvas 添加到相同的 id

javascript - 可预测的 Javascript 数组随机播放

javascript - 带有标签的输入类型复选框触发事件两次