jQuery JSTree“取消选中节点”性能问题

时间:2013-08-29 12:54:22

标签: javascript jquery jstree

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

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

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

1 个答案:

答案 0 :(得分: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();
  }
}