樹形運算元據,做個整理總結。本篇是關於樹節點拖拽選擇,重新生成一棵新樹,並支援刪除節點。demo 是基於 jquery 及 easy-ui 庫實現的。截圖:
利用 css3 實現。主要運用了:before
,:after
選擇器『畫』了兩個圓,然後利用border
進行圓的調整,最後利用animation
及transform:rotate()
實現旋轉動畫。
html:
css:
.loading
.loading:before
.loading:after
@keyframes loading
to }
主要 html 結構如下,css 就不展示,比較簡單。
已選標籤(0)
清空
js **比較多,先放個 js **組織結構圖:
其中 event 中實現的是篩選和清空功能。
1. 資料獲取,並渲染左側樹:renderselecttree
treeselectmod.$treetarget.addclass('loading');
settimeout(function ()
return text;
},onloadsuccess: function(e, node) );
}});
treeselectmod.setdraganddrop();
if (isedit)
} else
}, 1000);
2. 拖拽操作:setdraganddrop
// 設定被拖元素
$("#tree_select .tree-node").draggable();
},onstopdrag: function(e)
var node = treeselectmod.$treetarget.tree('getnode', e.data.target); // 獲取被拖動的節點資料
// 過濾
var selecteddata = treeselectmod.selecteddata;
if (node.children && node.children.length) ;
node.children.foreach(function(item) );
})var hassameparentnode = false;
for (var i = 0; i < selecteddata.length; i++)
}if (!hassameparentnode)
} else ;
if (parent) ;
parentnode['children'] = ;
parentnode['children'].push(childnode);
var hassameparentnode = false;
for (var i = 0; i < selecteddata.length; i++) );
if (!arr.length)
break;}}
if (!hassameparentnode) }}
// 最後,渲染 dom
treeselectmod.renderselectedtree(treeselectmod.selecteddata);
}});//設定目標物件允許放置被拖元素
$("#tree_selected").droppable();
3. 渲染已選擇樹,及樹節點刪除:renderselectedtree
$('#tree_selected').tree(
text += 'x';
return text;
},onclick: function(node)
}} else
}if (!selecteddata[i].children.length) }}
// 重新根據過濾後的資料進行渲染 dom
treeselectmod.renderselectedtree(treeselectmod.selecteddata);
},onloadsuccess: function()
});
其他操作比較簡單,就不贅述了,具體實現可看demo。
實現結果,只要每次右側節點拖拽放置了以及右側節點進行了節點刪除挫折,左側 dom 就要進行一遍渲染。可能會存在效能問題,但目前沒更好的實現方案。(歡迎有更好方案的提供建議,~~)
最後就是,目前實現的方案,只支援二級樹結構,多級是不支援的。
樹形選擇排序演算法
樹形選擇排序有時也稱為錦標賽排序。排序過程中,按照錦標賽比賽規則進行,將所有n個資料看成一棵完全二叉樹的葉子結點,首先,完全二叉樹的葉子結點兩兩比較,勝出的兄弟進入樹的上一層繼續和兄弟進行比較,如果某個葉子結點沒有兄弟,則直接進入上一層,一直到二叉樹的第二層的兩個兄弟節點進行比較,勝出者為第一名。為...
js樹形結構操作
按照pid分組,分組可以大大減少遞迴次數。array分組的最好方式是用物件接收array的項,該物件的key值就是分組憑證 按照pid和id的匹配 遞迴 已分組的資料。array轉樹形結構的演算法 params list 代轉化陣列 params parentid 起始節點 預設為 0 params...
silverlight樹形結構區服選擇
利用了silverlight toolkit中的treeview控制項實現了區服選擇。1.引用程式集 system.windows.controls.toolkit.dll 2.新建silverlight子控制項頁面 childregionworld1.xaml 3.在 childregionwor...