最近須要實現一個樹的多選連選功能,但發現extjs的多選模型MultiSelectionModel只提供了相似ctrl的多選功能,並無提供shift連選的功能。 網上也沒有關於實現此功能的例子,因而本身重寫了onNodeClick方法,供你們參考。 node
// 存放第一次點擊的節點id var node1 = null; var mst=new Ext.tree.MultiSelectionModel({ // 實現ctrl,shift多選 by menglei onNodeClick : function(n, e) { // 獲取該父節點下全部子節點 var childNodes = n.parentNode.childNodes; if (e.shiftKey) { if (node1 != null) { var v1 = v2 = v3 = 0; // 獲取第一次點擊的節點位置 for (var i = 0; i < childNodes.length; i++) { if (childNodes[i].id == node1) { v1 = i; break; } } // 獲取按shift點擊的節點位置 for (var i = 0; i < childNodes.length; i++) { if (childNodes[i].id == n.attributes.id) { v2 = i; break; } } // alert('v1:'+v1+" v2:"+v2); // 反向選擇 if (v1 > v2) { v3 = v2; v2 = v1; v1 = v3; } // 選中當前節點 this.select(n, e); // alert('v1:'+v1+" v2:"+v2); // 選擇所選區間內節點 for (var i = 0; i < childNodes.length; i++) { if (i >= v1 && i < v2 + 1) { this.select(childNodes[i], e, e.shiftKey); } else { continue; } } } else { // 選中當前節點 this.select(n, e); node1 = n.attributes.id; } } else if (e.ctrlKey) { this.select(n, e, e.ctrlKey); node1 = null; } else { // 選中當前節點 this.select(n, e); node1 = n.attributes.id; } } });