当我取消选中jstree中的大量节点时,我收到一个缓慢运行的脚本警告。
我正在使用循环来遍历数组以获取id,然后取消选中节点。有没有其他方法可以做到这一点或加快速度?在我的特殊情况下,我的数组长度为1600。
$.each(myArray, function(key, item){
$("#myTree").jstree("uncheck_node", "!#"+item);
});
答案 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();
}
}