zTree は、jQuery で実装された多機能の「ツリー プラグイン」です。 zTree の最大の利点は、優れたパフォーマンス、柔軟な構成、複数の機能の組み合わせです。
zTree 機能の編集
● zTree v3.0 はコアコードを機能ごとに分割しており、不要なコードをロードする必要がありません
● 遅延ロード技術を採用し、数万のノードを簡単にロードでき、IE6 でも基本的に即時停止を実現できます
● IE、FireFox、Chrome、Opera、Safari、その他のブラウザと互換性があります
● JSON データをサポート
● ノード データの静的および Ajax 非同期ロードをサポートします
● スキン変更/カスタムアイコンをサポート (CSS に依存)
● 非常に柔軟なチェックボックスまたはラジオ選択機能をサポート
● 複数のイベント応答コールバックを提供します
● 柔軟な編集 (追加/削除/変更/確認) 機能、ノードを自由にドラッグ アンド ドロップでき、複数のノードをドラッグ アンド ドロップすることもできます
● 1 ページ内に複数の Tree インスタンスを同時に生成可能
●簡単なパラメータ設定で柔軟な機能を実現
zTree 編集の利点
zTree の作成者は、空き時間を利用して zTree の機能を継続的に改善しており、新しいユーザーがすぐに使いこなせるように、ユーザーとタイムリーにコミュニケーションを取り、さまざまな質問にタイムリーに回答することもできます。現在、ますます多くのユーザーが、最近リリースされた QUI フレームワークの最新バージョンを含め、システム内の元のツリー プラグインを置き換えるために zTree を使用しています。
関連プラグインのバージョン:
jquery.ztree.exedit-3.4.js
jquery.ztree.all-3.4.js
jquery-1.8.0.js
function onAsyncSuccess(event, treeId, treeNode, msg) { curAsyncCount--; if (curStatus == "expand") { expandNodes(treeNode.children); } else if (curStatus == "async") { asyncNodes(treeNode.children); } if (curAsyncCount <= ) { curStatus = ""; // 节点定位 if(devicesSelect.selectNodeId){ // 节点变成被选中状态 var zTree = $.fn.zTree.getZTreeObj(zTreeId); zTree.cancelSelectedNode(); $("#" + devicesSelect.selectNodeId + "_a").addClass("curSelectedNode"); $("#treeDiv").animate({scrollTop:$("#"+devicesSelect.selectNodeId).offset().top-},);//是ms,也可以用slow代替 devicesSelect.selectNodeId = ""; } } } function expandNodes(nodes) { if (!nodes) return; curStatus = "expand"; var zTree = $.fn.zTree.getZTreeObj(zTreeId); for (var i=, l=nodes.length; i<l; i++) { if(ids.indexOf(nodes[i].id) != -){ if (nodes[i].isParent&&(ids.substring(,ids.indexOf(","))!=nodes[i].id)) { if(nodes[i].typeName.indexOf("虚拟")=="-"){ zTree.expandNode(nodes[i], true, false, false); } else if(nodes[i].type.indexOf(type)>"-"){ zTree.expandNode(nodes[i], true, false, false); } } else { goAsync = true; } } } if(goAsync==true){ var id_ = ids.substring(,ids.indexOf(",")); var node = zTree.getNodeByParam("id",id_); goAsync = false; me.curStatus = ""; me.type = ""; me.selectNodeId = node.tId; } }
ポジショニングのアイデア:
1. ノード A を見つけたいとします。ノード A の一意の識別子は objid
です。
2. objid に基づいてデータベースからすべての上位 objid を取得し、それらを結合して ids 変数に保存します。
3. onAsyncSuccess メソッドで ExpandNodes を呼び出します。このメソッドでは、[if (nodes[i].isParent&&(ids.substring(0,ids.indexOf(","))!=nodes[i].id を渡します。 ) )] id 内の id を持つノードをフィルターして展開します。
4. 通常の状況では、展開の最後に、objid に基づいて [var node = zTree.getNodeByParam("id",id_);] を通じてノード A オブジェクトを取得し、それを [zTree.selectNode] を通じて選択します。 (ノード);] ノード。
この場合、目的のノードを見つけて選択することはできますが、そのノードと同じ親ノードを持つデータが多数ある場合、ノード A が表示領域に表示されない場合があります。ソースコードを検索すると、Ztree は [$("#" node.tId).focus().blur();] メソッドを使用して位置決めを実現していることがわかりました。しかし、残念ながらバグがあります。
したがって、スクロール バーを使用して位置を自分で制御してください。実装は次のとおりです:
1. 位置の競合を防ぐために [zTree.selectNode(node);] を削除します
2. onAsyncSuccess メソッドで、ノードが展開されるタイミングを決定し、ノード A のオフセットを取得し、その値をツリーが配置されている DIV のscrollTop 属性に割り当てます。
$("#treeDiv1").animate({scrollTop:$("#" devicesSelect.selectNodeId).offset().top-300},1000);//1000 はミリ秒です。代わりに低速を使用することもできます
注: devicesSelect.selectNodeId は、[me.selectNodeId = node.tId] によって取得されたノード A のノード tid であり、treeDiv1 ツリーが配置されている div の id 属性です。