2

当我取消选中 jstree 中的大量节点时,我收到运行缓慢的脚本警告。

我正在使用循环遍历数组以获取 id,然后取消选中节点。有没有其他方法可以做到这一点或让它更快?在我的特殊情况下,我的数组长度是 1600。

$.each(myArray, function(key, item){
  $("#myTree").jstree("uncheck_node", "!#"+item);
});
4

1 回答 1

2

当您需要进行大量 DOM 操作时,一般建议是使用 将其分成几块setInterval/setTimeout,以便浏览器能够在脚本执行之间处理用户输入和其他事件。

例如(粗略的例子):

var done = 0;
var chunks = 4;
var myInterval = setInterval(process_chunk, 1000);
var $myTree = $("#myTree");
var chunkLength = myArray.length / chunks;

process_chunk = function() {
  var arrayChunk = myArray.slice(done*chunkLength, (done + 1)*chunkLength) 
  $.each(arrayChunk,  function(key, item){
    $myTree.jstree("uncheck_node", "!#"+item);
  });
  done += 1;
  if (done === chunks) {
    myInterval.clearInterval();
  }
}
于 2013-08-29T13:15:12.590 回答