簡(jiǎn)要教程
bootstrap-treeview是一款效果非撤谋祝酷的基于bootstrap的jQuery多級(jí)列表樹(shù)插件。該jQuery插件基于Twitter Bootstrap,以簡(jiǎn)單和優(yōu)雅的方式來(lái)顯示一些繼承樹(shù)結(jié)構(gòu),如視圖樹(shù)骚腥、列表樹(shù)等等。
插件依賴
Bootstrap v3.0.3
jQuery v2.0.3
以上兩個(gè)外部依賴文件已經(jīng)經(jīng)過(guò)測(cè)試可以正常使用瓶逃,其他版本的Bootstrap需要另行測(cè)試束铭。該插件不支持bootstrap 2。
使用方法
首先要在頁(yè)面中引入依賴文件和 bootstrap-treeview.js文件厢绝。
HTML結(jié)構(gòu)
可以使用任何HTML DOM元素來(lái)作為該列表樹(shù)的容器:
調(diào)用插件
該列表樹(shù)插件最基本的調(diào)用方法如下:
functiongetTree() {
// Some logic to retrieve, or generate tree structure
returndata;
}
$('#tree').treeview({data: getTree()});
數(shù)據(jù)結(jié)構(gòu)
為了創(chuàng)建樹(shù)的繼承結(jié)構(gòu)契沫,需要為該列表樹(shù)插件提供一個(gè)嵌套結(jié)構(gòu)的js對(duì)象。例如:
vartree = [
{
text:"Parent 1",
nodes: [
{
text:"Child 1",
nodes: [
{
text:"Grandchild 1"
},
{
text:"Grandchild 2"
}
]
},
{
text:"Child 2"
}
]
},
{
text:"Parent 2"
},
{
text:"Parent 3"
},
{
text:"Parent 4"
},
{
text:"Parent 5"
}
];
最簡(jiǎn)單的樹(shù)結(jié)構(gòu)可以只有一個(gè)節(jié)點(diǎn)昔汉,使用一個(gè)帶text屬性的js對(duì)象來(lái)實(shí)現(xiàn)即可:
{
text:"Node 1"
}
如果你需要自定義更多的內(nèi)容懈万,可以參考下面:
{
text:"Node 1",
icon:"glyphicon glyphicon-stop",
selectedIcon:"glyphicon glyphicon-stop",
color:"#000000",
backColor:"#FFFFFF",
href:"#node-1",
selectable:true,
state: {
checked:true,
disabled:true,
expanded:true,
selected:true
},
tags: ['available'],
nodes: [
{},
...
]
}
節(jié)點(diǎn)屬性
下面的參數(shù)可用于樹(shù)節(jié)點(diǎn)的屬性定義,如節(jié)點(diǎn)的文本靶病、顏色和標(biāo)簽等会通。
參數(shù)名稱參數(shù)類型參數(shù)描述
textString(必選項(xiàng))列表樹(shù)節(jié)點(diǎn)上的文本,通常是節(jié)點(diǎn)右邊的小圖標(biāo)娄周。
iconString(可選項(xiàng))列表樹(shù)節(jié)點(diǎn)上的圖標(biāo)涕侈,通常是節(jié)點(diǎn)左邊的圖標(biāo)。
selectedIconString(可選項(xiàng))當(dāng)某個(gè)節(jié)點(diǎn)被選擇后顯示的圖標(biāo)煤辨,通常是節(jié)點(diǎn)左邊的圖標(biāo)裳涛。
hrefString(可選項(xiàng))結(jié)合全局enableLinks選項(xiàng)為列表樹(shù)節(jié)點(diǎn)指定URL。
selectableBoolean. Default: true指定列表樹(shù)的節(jié)點(diǎn)是否可選擇众辨。設(shè)置為false將使節(jié)點(diǎn)展開(kāi)端三,并且不能被選擇。
stateObject(可選項(xiàng))一個(gè)節(jié)點(diǎn)的初始狀態(tài)鹃彻。
state.checkedBoolean郊闯,默認(rèn)值false指示一個(gè)節(jié)點(diǎn)是否處于checked狀態(tài),用一個(gè)checkbox圖標(biāo)表示。
state.disabledBoolean团赁,默認(rèn)值false指示一個(gè)節(jié)點(diǎn)是否處于disabled狀態(tài)旋奢。(不是selectable,expandable或checkable)
state.expandedBoolean然痊,默認(rèn)值false指示一個(gè)節(jié)點(diǎn)是否處于展開(kāi)狀態(tài)。
state.selectedBoolean屉符,默認(rèn)值false指示一個(gè)節(jié)點(diǎn)是否可以被選擇剧浸。
colorString. Optional節(jié)點(diǎn)的前景色,覆蓋全局的前景色選項(xiàng)矗钟。
backColorString. Optional節(jié)點(diǎn)的背景色唆香,覆蓋全局的背景色選項(xiàng)。
tagsArray of Strings. Optional通過(guò)結(jié)合全局showTags選項(xiàng)來(lái)在列表樹(shù)節(jié)點(diǎn)的右邊添加額外的信息吨艇。
全局參數(shù)
參數(shù)可以定制treeview的默認(rèn)外觀和行為躬它。參數(shù)使用一個(gè)對(duì)象來(lái)在插件初始化時(shí)傳入:
// Example: initializing the treeview
// expanded to 5 levels
// with a background color of green
$('#tree').treeview({
data: data,// data is not optional
levels: 5,
backColor:'green'
});
參數(shù)名稱參數(shù)類型默認(rèn)值描述
dataArray of Objects無(wú)列表樹(shù)上顯示的數(shù)據(jù)。
backColorString所有合法的顏色值东涡,Default: inherits from Bootstrap.css冯吓。設(shè)置所有列表樹(shù)節(jié)點(diǎn)的背景顏色。
borderColorString所有合法的顏色值疮跑,Default: inherits from Bootstrap.css组贺。設(shè)置列表樹(shù)容器的邊框顏色,如果不想要邊框可以設(shè)置showBorder屬性為false祖娘。
checkedIconString:class名稱Bootstrap Glyphicons定義的 "glyphicon glyphicon-check"設(shè)置處于checked狀態(tài)的復(fù)選框圖標(biāo)失尖。
collapseIconString:class名稱Bootstrap Glyphicons定義的 "glyphicon glyphicon-minus"設(shè)置列表樹(shù)可收縮節(jié)點(diǎn)的圖標(biāo)。
colorString所有合法的顏色值渐苏,Default: inherits from Bootstrap.css掀潮。設(shè)置列表樹(shù)所有節(jié)點(diǎn)的前景色。
emptyIconString:class名稱Bootstrap Glyphicons定義的"glyphicon"琼富。設(shè)置列表樹(shù)中沒(méi)有子節(jié)點(diǎn)的節(jié)點(diǎn)的圖標(biāo)仪吧。
enableLinksBooleanfalse是否使用當(dāng)前節(jié)點(diǎn)的文本作為超鏈接。超鏈接的href值必須在每個(gè)節(jié)點(diǎn)的data結(jié)構(gòu)中給出鞠眉。
expandIconString:class名稱Bootstrap Glyphicons定義的 "glyphicon glyphicon-plus"設(shè)置列表樹(shù)可展開(kāi)節(jié)點(diǎn)的圖標(biāo)邑商。
highlightSearchResultsBooleantrue是否高亮搜索結(jié)果。
highlightSelectedBooleantrue當(dāng)選擇節(jié)點(diǎn)時(shí)是否高亮顯示凡蚜。
onhoverColorString所有合法的顏色值人断, Default: '#F5F5F5'。設(shè)置列表樹(shù)的節(jié)點(diǎn)在用戶鼠標(biāo)滑過(guò)時(shí)的背景顏色朝蜘。
levelsIntegerDefault: 2設(shè)置繼承樹(shù)默認(rèn)展開(kāi)的級(jí)別恶迈。
multiSelectBooleanfalse是否可以同時(shí)選擇多個(gè)節(jié)點(diǎn)。
nodeIconString:class名稱Bootstrap Glyphicons定義的 "glyphicon glyphicon-stop"設(shè)置所有列表樹(shù)節(jié)點(diǎn)上的默認(rèn)圖標(biāo)。
selectedIconString:class名稱Bootstrap Glyphicons定義的 "glyphicon glyphicon-stop"設(shè)置所有被選擇的節(jié)點(diǎn)上的默認(rèn)圖標(biāo)暇仲。
searchResultBackColorString所有合法的顏色值步做, Default: undefined, inherits。設(shè)置搜索結(jié)果節(jié)點(diǎn)的背景顏色奈附。
searchResultColorString所有合法的顏色值全度, Default: '#D9534F'設(shè)置搜索結(jié)果節(jié)點(diǎn)的前景顏色。
selectedBackColorString所有合法的顏色值斥滤, Default: '#428bca'設(shè)置被選擇節(jié)點(diǎn)的背景顏色将鸵。
selectedColorString所有合法的顏色值, Default: '#FFFFFF'佑颇。設(shè)置列表樹(shù)選擇節(jié)點(diǎn)的背景顏色顶掉。
showBorderBooleantrue是否在節(jié)點(diǎn)上顯示邊框。
showCheckboxBooleanfalse是否在節(jié)點(diǎn)上顯示checkboxes挑胸。
showIconBooleantrue是否顯示節(jié)點(diǎn)圖標(biāo)痒筒。
showTagsBooleanfalse是否在每個(gè)節(jié)點(diǎn)右邊顯示tags標(biāo)簽。tag值必須在每個(gè)列表樹(shù)的data結(jié)構(gòu)中給出茬贵。
uncheckedIconString:class名稱Bootstrap Glyphicons定義的 "glyphicon glyphicon-unchecked"設(shè)置圖標(biāo)為未選擇狀態(tài)的checkbox圖標(biāo)簿透。
可用方法
你可以通過(guò)兩種方式來(lái)調(diào)用方法:
1、插件包裝器:插件的包裝器可以作為訪問(wèn)底層方法的代理解藻。
$('#tree').treeview('methodName', args)
多個(gè)參數(shù)必須使用數(shù)組對(duì)象來(lái)傳入萎战。
2、直接使用treeview:你可以通過(guò)下面兩種方法中的一種來(lái)獲取treeview對(duì)象實(shí)例舆逃。
//該方法返回一個(gè)treeview的對(duì)象實(shí)例
$('#tree').treeview(true)
.methodName(args);
//對(duì)象實(shí)例也保存在DOM元素的data中蚂维,
//可以使用'treeview'的id來(lái)訪問(wèn)它。
$('#tree').data('treeview')
.methodName(args);
treeview方法列表
checkAll(options):選擇所有的節(jié)點(diǎn)路狮。
$('#tree').treeview('checkAll', { silent:true});
觸發(fā)nodeChecked事件虫啥,傳入silent來(lái)阻止其它事件。
checkNode(node | nodeId, options):選擇指定的節(jié)點(diǎn)奄妨,接收節(jié)點(diǎn)或節(jié)點(diǎn)ID涂籽。
$('#tree').treeview('checkNode', [ nodeId, { silent:true} ]);
觸發(fā)nodeChecked事件,傳入silent來(lái)阻止其它事件砸抛。
clearSearch():清空以前的搜索結(jié)果评雌。例如清除它們的高亮狀態(tài)。
$('#tree').treeview('clearSearch');
觸發(fā)searchCleared事件直焙。
collapseAll(options):折疊所有的節(jié)點(diǎn)景东,折疊整個(gè)樹(shù)。
$('#tree').treeview('collapseAll', { silent:true});
觸發(fā)nodeCollapsed事件奔誓,傳入silent來(lái)阻止其它事件斤吐。
collapseNode(node | nodeId, options):折疊指定節(jié)點(diǎn)和它的子節(jié)點(diǎn)。如果不想折疊子節(jié)點(diǎn),可以設(shè)置{ ignoreChildren: true }和措。
$('#tree').treeview('collapseNode', [ nodeId, { silent:true, ignoreChildren:false} ]);
觸發(fā)nodeCollapsed事件庄呈,傳入silent來(lái)阻止其它事件。
disableAll(options):禁用所有的節(jié)點(diǎn)派阱。
$('#tree').treeview('disableAll', { silent:true});
觸發(fā)nodeDisabled事件诬留,傳入silent來(lái)阻止其它事件。
disableNode(node | nodeId, options):禁用指定的節(jié)點(diǎn)贫母,接收節(jié)點(diǎn)或節(jié)點(diǎn)ID文兑。
$('#tree').treeview('disableNode', [ nodeId, { silent:true} ]);
觸發(fā)nodeDisabled事件,傳入silent來(lái)阻止其它事件颁独。
enableAll(options):?jiǎn)⒂盟械墓?jié)點(diǎn)。
$('#tree').treeview('enableAll', { silent:true});
觸發(fā)nodeEnabled事件伪冰,傳入silent來(lái)阻止其它事件誓酒。
enableNode(node | nodeId, options):?jiǎn)⒂弥付ǖ墓?jié)點(diǎn),接收節(jié)點(diǎn)或節(jié)點(diǎn)ID贮聂。
$('#tree').treeview('enableNode', [ nodeId, { silent:true} ]);
觸發(fā)nodeEnabled事件靠柑,傳入silent來(lái)阻止其它事件。
expandAll(options):展開(kāi)所有的樹(shù)節(jié)點(diǎn)吓懈。也可以展開(kāi)任何給定級(jí)別的樹(shù)節(jié)點(diǎn)歼冰。
$('#tree').treeview('expandAll', { levels: 2, silent:true});
觸發(fā)nodeExpanded事件,傳入silent來(lái)阻止其它事件耻警。
expandNode(node | nodeId, options):展開(kāi)指定的樹(shù)節(jié)點(diǎn)隔嫡,接收節(jié)點(diǎn)或節(jié)點(diǎn)ID。也可以展開(kāi)任何給定級(jí)別的樹(shù)節(jié)點(diǎn)甘穿。
$('#tree').treeview('expandNode', [ nodeId, { levels: 2, silent:true} ]);
觸發(fā)nodeExpanded事件腮恩,傳入silent來(lái)阻止其它事件。
getCollapsed():返回折疊節(jié)點(diǎn)的數(shù)組温兼。例如state.expanded = false秸滴。
$('#tree').treeview('getCollapsed', nodeId);
getDisabled():返回被禁用節(jié)點(diǎn)的數(shù)組。
$('#tree').treeview('getDisabled', nodeId);
getEnabled():返回可用節(jié)點(diǎn)的數(shù)組募判。
$('#tree').treeview('getEnabled', nodeId);
getExpanded():返回所有展開(kāi)節(jié)點(diǎn)的數(shù)組荡含。
$('#tree').treeview('getExpanded', nodeId);
getNode(nodeId):返回給定節(jié)點(diǎn)ID的單一節(jié)點(diǎn)對(duì)象。
$('#tree').treeview('getNode', nodeId);
getParent(node | nodeId):返回給定節(jié)點(diǎn)的父節(jié)點(diǎn)届垫,如果沒(méi)有則返回undefined释液。
$('#tree').treeview('getParent', node);
getSelected():返回所有被選擇節(jié)點(diǎn)的數(shù)組,例如:state.selected = true装处。
$('#tree').treeview('getSelected', nodeId);
getSiblings(node | nodeId):返回給定節(jié)點(diǎn)的兄弟節(jié)點(diǎn)的數(shù)組均澳,如果沒(méi)有則返回undefined。
$('#tree').treeview('getSiblings', node);
getUnselected():返回沒(méi)有被選擇節(jié)點(diǎn)的數(shù)組。例如:state.selected = false找前。
$('#tree').treeview('getUnselected', nodeId);
remove():移除列表樹(shù)容器糟袁。移除附加的事件、附加對(duì)象和額外的html元素躺盛。
$('#tree').treeview('remove');
revealNode(node | nodeId, options):顯示一個(gè)樹(shù)節(jié)點(diǎn)项戴,展開(kāi)從這個(gè)節(jié)點(diǎn)開(kāi)始到根節(jié)點(diǎn)的所有節(jié)點(diǎn)。
$('#tree').treeview('revealNode', [ nodeId, { silent:true} ]);
觸發(fā)nodeExpanded事件槽惫,傳入silent來(lái)阻止其它事件周叮。
search(pattern, options):搜索匹配是非常的指定樹(shù)節(jié)點(diǎn),并高亮它們界斜。返回配平節(jié)點(diǎn)的數(shù)組仿耽。
$('#tree').treeview('search', ['Parent', {
ignoreCase:true,// case insensitive
exactMatch:false,// like or equals
revealResults:true,// reveal matching nodes
}]);
觸發(fā)searchComplete事件。
selectNode(node | nodeId, options):選擇一個(gè)給定的樹(shù)節(jié)點(diǎn)各薇,接收節(jié)點(diǎn)或節(jié)點(diǎn)ID项贺。
$('#tree').treeview('selectNode', [ nodeId, { silent:true} ]);
觸發(fā)nodeSelected事件,傳入silent來(lái)阻止其它事件峭判。
toggleNodeChecked(node | nodeId, options):切換節(jié)點(diǎn)的Check狀態(tài)开缎。
$('#tree').treeview('toggleNodeChecked', [ nodeId, { silent:true} ]);
觸發(fā)nodeChecked事件或nodeUnchecked事件,傳入silent來(lái)阻止其它事件林螃。
toggleNodeDisabled(node | nodeId, options):切換一個(gè)節(jié)點(diǎn)的可用和不可用狀態(tài)奕删。
$('#tree').treeview('toggleNodeDisabled', [ nodeId, { silent:true} ]);
觸發(fā)nodeDisabled事件或nodeEnabled事件,傳入silent來(lái)阻止其它事件疗认。
toggleNodeExpanded(node | nodeId, options):切換一個(gè)節(jié)點(diǎn)的展開(kāi)和折疊狀態(tài)完残。
$('#tree').treeview('toggleNodeExpanded', [ nodeId, { silent:true} ]);
觸發(fā)nodeExpanded事件或nodeCollapsed事件,傳入silent來(lái)阻止其它事件横漏。
toggleNodeSelected(node | nodeId, options):切換一個(gè)節(jié)點(diǎn)的選擇狀態(tài)坏怪。
$('#tree').treeview('toggleNodeSelected', [ nodeId, { silent:true} ]);
觸發(fā)nodeSelected事件或nodeUnselected事件,傳入silent來(lái)阻止其它事件绊茧。
uncheckAll(options):Uncheck所有的節(jié)點(diǎn)铝宵。
$('#tree').treeview('uncheckAll', { silent:true});
觸發(fā)nodeUnchecked事件,傳入silent來(lái)阻止其它事件华畏。
uncheckNode(node | nodeId, options):Uncheck一個(gè)給定的節(jié)點(diǎn)鹏秋,接收節(jié)點(diǎn)或節(jié)點(diǎn)ID。
$('#tree').treeview('uncheckNode', [ nodeId, { silent:true} ]);
觸發(fā)nodeUnchecked事件亡笑,傳入silent來(lái)阻止其它事件侣夷。
unselectNode(node | nodeId, options):不選擇指定的節(jié)點(diǎn),接收節(jié)點(diǎn)或節(jié)點(diǎn)ID仑乌。
$('#tree').treeview('unselectNode', [ nodeId, { silent:true} ]);
觸發(fā)nodeUnselected事件百拓,傳入silent來(lái)阻止其它事件琴锭。
事件
你可以在參數(shù)中使用回調(diào)函數(shù)來(lái)綁定任何事件,或者使用標(biāo)準(zhǔn)的jQuery.on()方法來(lái)綁定事件衙传。
在參數(shù)中調(diào)用的示例:
$('#tree').treeview({
// The naming convention for callback's is to prepend with `on`
// and capitalize the first letter of the event name
// e.g. nodeSelected -> onNodeSelected
onNodeSelected:function(event, data) {
// 事件代碼...
});
使用jQuery.on方法:
$('#tree').on('nodeSelected',function(event, data) {
// 事件代碼...
});
可用事件列表
nodeChecked (event, node):一個(gè)節(jié)點(diǎn)被checked决帖。
nodeCollapsed (event, node):一個(gè)節(jié)點(diǎn)被折疊。
nodeDisabled (event, node):一個(gè)節(jié)點(diǎn)被禁用蓖捶。
nodeEnabled (event, node):一個(gè)節(jié)點(diǎn)被啟用地回。
nodeExpanded (event, node):一個(gè)節(jié)點(diǎn)被展開(kāi)。
nodeSelected (event, node):一個(gè)節(jié)點(diǎn)被選擇俊鱼。
nodeUnchecked (event, node):一個(gè)節(jié)點(diǎn)被unchecked刻像。
nodeUnselected (event, node):取消選擇一個(gè)節(jié)點(diǎn)。
searchComplete (event, results):搜索完成之后觸發(fā)并闲。
searchCleared (event, results):搜索結(jié)果被清除之后觸發(fā)细睡。
簡(jiǎn)單例子:
var tree = [
{
text: "Parent 1",
nodes: [
{
text: "Child 1",
nodes: [
{
text: "Grandchild 1"
},
{
text: "Grandchild 2",
icon: "glyphicon glyphicon-stop",
selectedIcon: "glyphicon glyphicon-stop",
color: "#000000",
backColor: "#FFFFFF",
href: "#node-1",
selectable: false,
state: {
checked: false,
disabled: false,
expanded: true,
selected: false
},
}
]
},
{
text: "Child 2",
color: "#000000",
backColor: "#FFFFFF",
href: "#node-1",
selectable: true,
state: {
checked: true,
disabled: true,
expanded: true,
selected: true
},
}
]
},
{
text: "Parent 2"
},
{
text: "Parent 3"
},
{
text: "Parent 4"
},
{
text: "Parent 5"
}];
/*
@currentNode 當(dāng)前節(jié)點(diǎn)
勾選當(dāng)前節(jié)點(diǎn)遞歸勾選下面子節(jié)點(diǎn)
*/
function toggleCheckChildren(currentNode) {
// $('#treeview').treeview('toggleNodeChecked', [currentNode.nodeId, { silent: true }]);
$('#treeview').treeview('checkNode', [currentNode.nodeId, { silent: true }]);
var childs = currentNode.nodes;
if (childs) {
for (var child in childs) {
toggleCheckChildren(childs[child]);
}
}
else {
return;
}
}
/*
@currentNode 當(dāng)前節(jié)點(diǎn)
取消勾選當(dāng)前節(jié)點(diǎn)遞歸取消下面子節(jié)點(diǎn)
*/
function toggleUncheckChildren(currentNode) {
$('#treeview').treeview('uncheckNode', [currentNode.nodeId, { silent: true }]);
var childs = currentNode.nodes;
if (childs) {
for (var child in childs) {
toggleUncheckChildren(childs[child]);
}
}
else {
return;
}
}
$(function () {
var options = {
bootstrap2: false,
showTags: false,
levels: 5,
showCheckbox: true,
data: tree,
onNodeChecked: function (event, node) {
debugger;
toggleCheckChildren(node);
},
onNodeUnchecked: function (event, node) {
debugger;
toggleUncheckChildren(node);
}
}
$('#treeview').treeview(options);
});