Javascript jQuery浏览器在向div中添加大量行时冻结

Javascript jQuery浏览器在向div中添加大量行时冻结,javascript,jquery,browser,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_' + da

当我需要通过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']));
}
for(var i=0;data.length;i++){
增加要素(数据[i]);
}
功能添加元素(数据){

$(“#wrapper”).append(“不是在循环中调用add#elem,而是在循环数据变量时将元素的所有html存储在单个变量中,然后通过传入新变量来调用add#elem

var元素=”;
//在循环中存储所有元素
对于(var i=0;data.length;i++){

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

var元素=”;
//在循环中存储所有元素
对于(var i=0;data.length;i++){

elements+='如果要处理每个对象,可以执行以下操作:

 for (var i=0;i< data.length; i++) {
 let u=i;
 setTimeout(()=>{
 add_elem(data[u]);
 },0);
 } 
for(变量i=0;i{
添加元素(数据[u]);
},0);
} 

这会将调用推送到浏览器QUE上,当主线程空闲(因此没有阻塞)时才执行该调用。

如果要处理每个对象,可以执行以下操作:

 for (var i=0;i< data.length; i++) {
 let u=i;
 setTimeout(()=>{
 add_elem(data[u]);
 },0);
 } 
for(变量i=0;i{
添加元素(数据[u]);
},0);
} 

这将调用推送到浏览器QUE上,在主线程空闲时执行QUE(因此没有阻塞)

只是更新了它,使其在元素附加到DOM后发生。在实现建议的解决方案后,您遇到了什么问题?好吧,因为您仍然在大规模循环中调用unifrom\u elem函数,没有任何时间中断,我想问题可能会一直存在……无论如何,支持立即放置所有HTML。只是更新了它一旦元素被添加到DOM中就会发生。在实现建议的解决方案后,您会遇到什么问题?好吧,因为您仍然在大规模循环中调用unifrom_elem函数,没有任何时间中断,我想问题可能会一直存在……无论如何,请投票支持立即放置所有HTML。执行类似Juan在中所示的操作他们的答案。另外,如果
uniform\u elem
使用
.css()
来设置元素的样式,去掉它,并通过样式表进行所有样式设置。像Juan在他们的答案中所显示的那样做。另外,如果
uniform\u elem
使用
.css()
来设置元素的样式,去掉它,并通过样式表进行所有样式设置。