2012-09-13 58 views
1

我將超過1000個節點(包括子節點)加載到dynatree中,並使用複選框來選擇每個節點。帶有1000複選框的jQuery Dynatree非常慢

但是,如果我們在演示中選擇全部或取消全選,http://wwwendt.de/tech/dynatree/doc/sample-select.html的速度非常慢,瀏覽器會掛起10秒鐘。

是否有修復?

編輯:樹有6-8級嵌套。每個級別都有大約5-10個節點。

更新代碼

<a href="#" id="select-all">select all</a> 
<div id="echoSelection"></div> 
<div id="my-tree"></div> 

$('#select-all').click(function(){ 
    alert($("#my-tree").dynatree("getRoot").length); 
    $("#my-tree").dynatree("getRoot").visit(function(node){ 
      node.select(false); 
     }); 
    return false; 

}); 

$("#my-tree").dynatree({ 
     initAjax: { 
      url: 'jsonData.aspx', 
      data: { type: "all" } 
     }, 
     checkbox: true, 
     selectMode: 3, 
     onSelect: function (select, node) { 
      // Display list of selected nodes 
      var selNodes = node.tree.getSelectedNodes(); 
      // convert to title/key array 
      var selKeys = $.map(selNodes, function (node) { 
       return "[" + node.data.key + "]: '" + node.data.title + "'"; 
      }); 
      $("#echoSelection2").text(selKeys.join(", ")); 
     }, 
     onClick: function (node, event) { 
      // We should not toggle, if target was "checkbox", because this 
      // would result in double-toggle (i.e. no toggle) 
      if (node.getEventTargetType(event) == "title") 
       node.toggleSelect(); 
     }, 
     onKeydown: function (node, event) { 
      if (event.which == 32) { 
       node.toggleSelect(); 
       return false; 
      } 
     }, 

     fx: { height: "toggle", duration: 200 }, 
     autoCollapse: true 
    }); 
} 

JSON格式示例

[ 
{"title":"Node 1","isFolder":false,"isLazy":false,"key":"1","icon":null,"prevNode":0,"nextNode":0,"children":[{"title":"Node 6","isFolder":false,"isLazy":false,"key":"6","icon":null,"prevNode":0,"nextNode":0,"children":[],"tooltip":null,"addClass":null,"expand":false,"MetaData":null}],"tooltip":null,"expand":false,"MetaData":null},{"title":"Node 2","isFolder":false,"isLazy":false,"key":"2","icon":null,"prevNode":0,"nextNode":0,"children":[],"tooltip":null,"expand":false,"MetaData":null},{"title":"Node 3","isFolder":false,"isLazy":false,"key":"3","icon":null,"prevNode":0,"nextNode":0,"children":[],"tooltip":null,"expand":false,"MetaData":null}] 
+0

是您的代碼aexact比賽進行到演示?你懶加載?請張貼代碼。 –

+0

@JMWells:更新了代碼。 –

+1

您確定這是代碼的準確表示嗎?我只是在jsFiddle上設置[this](http://jsfiddle.net/ApCUS/20/),並且可以在一秒鐘內在chrome中選擇62k個節點以上的內容。向上和Dynatree引發RangeError異常。你是否有任何綁定到可能導致每個選擇事件發生額外處理的事件?或者也許是某種遞歸? –

回答