基于bootstrap的jQuery多级列表树插件

简要教程

bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件。该jQuery插件基于Twitter Bootstrap,以简单和优雅的方式来显示一些继承树结构,如视图树、列表树等等。

插件依赖

Bootstrap v3.0.3

jQuery v2.0.3

以上两个外部依赖文件已经经过测试可以正常使用,其他版本的Bootstrap需要另行测试。该插件不支持bootstrap 2。

使用方法

首先要在页面中引入依赖文件和 bootstrap-treeview.js文件。

HTML结构

可以使用任何HTML DOM元素来作为该列表树的容器:

调用插件

该列表树插件最基本的调用方法如下:

functiongetTree() {

// Some logic to retrieve, or generate tree structure

returndata;

}

$('#tree').treeview({data: getTree()});

数据结构

为了创建树的继承结构,需要为该列表树插件提供一个嵌套结构的js对象。例如:

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"

}

];

最简单的树结构可以只有一个节点,使用一个带text属性的js对象来实现即可:

{

text:"Node 1"

}

如果你需要自定义更多的内容,可以参考下面:

{

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: [

{},

...

]

}

节点属性

下面的参数可用于树节点的属性定义,如节点的文本、颜色和标签等。

参数名称参数类型参数描述

textString(必选项)列表树节点上的文本,通常是节点右边的小图标。

iconString(可选项)列表树节点上的图标,通常是节点左边的图标。

selectedIconString(可选项)当某个节点被选择后显示的图标,通常是节点左边的图标。

hrefString(可选项)结合全局enableLinks选项为列表树节点指定URL。

selectableBoolean. Default: true指定列表树的节点是否可选择。设置为false将使节点展开,并且不能被选择。

stateObject(可选项)一个节点的初始状态。

state.checkedBoolean,默认值false指示一个节点是否处于checked状态,用一个checkbox图标表示。

state.disabledBoolean,默认值false指示一个节点是否处于disabled状态。(不是selectable,expandable或checkable)

state.expandedBoolean,默认值false指示一个节点是否处于展开状态。

state.selectedBoolean,默认值false指示一个节点是否可以被选择。

colorString. Optional节点的前景色,覆盖全局的前景色选项。

backColorString. Optional节点的背景色,覆盖全局的背景色选项。

tagsArray of Strings. Optional通过结合全局showTags选项来在列表树节点的右边添加额外的信息。

全局参数

参数可以定制treeview的默认外观和行为。参数使用一个对象来在插件初始化时传入:

// 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'

});

参数名称参数类型默认值描述

dataArray of Objects无列表树上显示的数据。

backColorString所有合法的颜色值,Default: inherits from Bootstrap.css。设置所有列表树节点的背景颜色。

borderColorString所有合法的颜色值,Default: inherits from Bootstrap.css。设置列表树容器的边框颜色,如果不想要边框可以设置showBorder属性为false。

checkedIconString:class名称Bootstrap Glyphicons定义的 "glyphicon glyphicon-check"设置处于checked状态的复选框图标。

collapseIconString:class名称Bootstrap Glyphicons定义的 "glyphicon glyphicon-minus"设置列表树可收缩节点的图标。

colorString所有合法的颜色值,Default: inherits from Bootstrap.css。设置列表树所有节点的前景色。

emptyIconString:class名称Bootstrap Glyphicons定义的"glyphicon"。设置列表树中没有子节点的节点的图标。

enableLinksBooleanfalse是否使用当前节点的文本作为超链接。超链接的href值必须在每个节点的data结构中给出。

expandIconString:class名称Bootstrap Glyphicons定义的 "glyphicon glyphicon-plus"设置列表树可展开节点的图标。

highlightSearchResultsBooleantrue是否高亮搜索结果。

highlightSelectedBooleantrue当选择节点时是否高亮显示。

onhoverColorString所有合法的颜色值, Default: '#F5F5F5'。设置列表树的节点在用户鼠标滑过时的背景颜色。

levelsIntegerDefault: 2设置继承树默认展开的级别。

multiSelectBooleanfalse是否可以同时选择多个节点。

nodeIconString:class名称Bootstrap Glyphicons定义的 "glyphicon glyphicon-stop"设置所有列表树节点上的默认图标。

selectedIconString:class名称Bootstrap Glyphicons定义的 "glyphicon glyphicon-stop"设置所有被选择的节点上的默认图标。

searchResultBackColorString所有合法的颜色值, Default: undefined, inherits。设置搜索结果节点的背景颜色。

searchResultColorString所有合法的颜色值, Default: '#D9534F'设置搜索结果节点的前景颜色。

selectedBackColorString所有合法的颜色值, Default: '#428bca'设置被选择节点的背景颜色。

selectedColorString所有合法的颜色值, Default: '#FFFFFF'。设置列表树选择节点的背景颜色。

showBorderBooleantrue是否在节点上显示边框。

showCheckboxBooleanfalse是否在节点上显示checkboxes。

showIconBooleantrue是否显示节点图标。

showTagsBooleanfalse是否在每个节点右边显示tags标签。tag值必须在每个列表树的data结构中给出。

uncheckedIconString:class名称Bootstrap Glyphicons定义的 "glyphicon glyphicon-unchecked"设置图标为未选择状态的checkbox图标。

可用方法

你可以通过两种方式来调用方法:

1、插件包装器:插件的包装器可以作为访问底层方法的代理。

$('#tree').treeview('methodName', args)

多个参数必须使用数组对象来传入。

2、直接使用treeview:你可以通过下面两种方法中的一种来获取treeview对象实例。

//该方法返回一个treeview的对象实例

$('#tree').treeview(true)

.methodName(args);

//对象实例也保存在DOM元素的data中,

//可以使用'treeview'的id来访问它。

$('#tree').data('treeview')

.methodName(args);

treeview方法列表

checkAll(options):选择所有的节点。

$('#tree').treeview('checkAll', { silent:true});

触发nodeChecked事件,传入silent来阻止其它事件。

checkNode(node | nodeId, options):选择指定的节点,接收节点或节点ID。

$('#tree').treeview('checkNode', [ nodeId, { silent:true} ]);

触发nodeChecked事件,传入silent来阻止其它事件。

clearSearch():清空以前的搜索结果。例如清除它们的高亮状态。

$('#tree').treeview('clearSearch');

触发searchCleared事件。

collapseAll(options):折叠所有的节点,折叠整个树。

$('#tree').treeview('collapseAll', { silent:true});

触发nodeCollapsed事件,传入silent来阻止其它事件。

collapseNode(node | nodeId, options):折叠指定节点和它的子节点。如果不想折叠子节点,可以设置{ ignoreChildren: true }。

$('#tree').treeview('collapseNode', [ nodeId, { silent:true, ignoreChildren:false} ]);

触发nodeCollapsed事件,传入silent来阻止其它事件。

disableAll(options):禁用所有的节点。

$('#tree').treeview('disableAll', { silent:true});

触发nodeDisabled事件,传入silent来阻止其它事件。

disableNode(node | nodeId, options):禁用指定的节点,接收节点或节点ID。

$('#tree').treeview('disableNode', [ nodeId, { silent:true} ]);

触发nodeDisabled事件,传入silent来阻止其它事件。

enableAll(options):启用所有的节点。

$('#tree').treeview('enableAll', { silent:true});

触发nodeEnabled事件,传入silent来阻止其它事件。

enableNode(node | nodeId, options):启用指定的节点,接收节点或节点ID。

$('#tree').treeview('enableNode', [ nodeId, { silent:true} ]);

触发nodeEnabled事件,传入silent来阻止其它事件。

expandAll(options):展开所有的树节点。也可以展开任何给定级别的树节点。

$('#tree').treeview('expandAll', { levels: 2, silent:true});

触发nodeExpanded事件,传入silent来阻止其它事件。

expandNode(node | nodeId, options):展开指定的树节点,接收节点或节点ID。也可以展开任何给定级别的树节点。

$('#tree').treeview('expandNode', [ nodeId, { levels: 2, silent:true} ]);

触发nodeExpanded事件,传入silent来阻止其它事件。

getCollapsed():返回折叠节点的数组。例如state.expanded = false。

$('#tree').treeview('getCollapsed', nodeId);

getDisabled():返回被禁用节点的数组。

$('#tree').treeview('getDisabled', nodeId);

getEnabled():返回可用节点的数组。

$('#tree').treeview('getEnabled', nodeId);

getExpanded():返回所有展开节点的数组。

$('#tree').treeview('getExpanded', nodeId);

getNode(nodeId):返回给定节点ID的单一节点对象。

$('#tree').treeview('getNode', nodeId);

getParent(node | nodeId):返回给定节点的父节点,如果没有则返回undefined。

$('#tree').treeview('getParent', node);

getSelected():返回所有被选择节点的数组,例如:state.selected = true。

$('#tree').treeview('getSelected', nodeId);

getSiblings(node | nodeId):返回给定节点的兄弟节点的数组,如果没有则返回undefined。

$('#tree').treeview('getSiblings', node);

getUnselected():返回没有被选择节点的数组。例如:state.selected = false。

$('#tree').treeview('getUnselected', nodeId);

remove():移除列表树容器。移除附加的事件、附加对象和额外的html元素。

$('#tree').treeview('remove');

revealNode(node | nodeId, options):显示一个树节点,展开从这个节点开始到根节点的所有节点。

$('#tree').treeview('revealNode', [ nodeId, { silent:true} ]);

触发nodeExpanded事件,传入silent来阻止其它事件。

search(pattern, options):搜索匹配是非常的指定树节点,并高亮它们。返回配平节点的数组。

$('#tree').treeview('search', ['Parent', {

ignoreCase:true,// case insensitive

exactMatch:false,// like or equals

revealResults:true,// reveal matching nodes

}]);

触发searchComplete事件。

selectNode(node | nodeId, options):选择一个给定的树节点,接收节点或节点ID。

$('#tree').treeview('selectNode', [ nodeId, { silent:true} ]);

触发nodeSelected事件,传入silent来阻止其它事件。

toggleNodeChecked(node | nodeId, options):切换节点的Check状态。

$('#tree').treeview('toggleNodeChecked', [ nodeId, { silent:true} ]);

触发nodeChecked事件或nodeUnchecked事件,传入silent来阻止其它事件。

toggleNodeDisabled(node | nodeId, options):切换一个节点的可用和不可用状态。

$('#tree').treeview('toggleNodeDisabled', [ nodeId, { silent:true} ]);

触发nodeDisabled事件或nodeEnabled事件,传入silent来阻止其它事件。

toggleNodeExpanded(node | nodeId, options):切换一个节点的展开和折叠状态。

$('#tree').treeview('toggleNodeExpanded', [ nodeId, { silent:true} ]);

触发nodeExpanded事件或nodeCollapsed事件,传入silent来阻止其它事件。

toggleNodeSelected(node | nodeId, options):切换一个节点的选择状态。

$('#tree').treeview('toggleNodeSelected', [ nodeId, { silent:true} ]);

触发nodeSelected事件或nodeUnselected事件,传入silent来阻止其它事件。

uncheckAll(options):Uncheck所有的节点。

$('#tree').treeview('uncheckAll', { silent:true});

触发nodeUnchecked事件,传入silent来阻止其它事件。

uncheckNode(node | nodeId, options):Uncheck一个给定的节点,接收节点或节点ID。

$('#tree').treeview('uncheckNode', [ nodeId, { silent:true} ]);

触发nodeUnchecked事件,传入silent来阻止其它事件。

unselectNode(node | nodeId, options):不选择指定的节点,接收节点或节点ID。

$('#tree').treeview('unselectNode', [ nodeId, { silent:true} ]);

触发nodeUnselected事件,传入silent来阻止其它事件。

事件

你可以在参数中使用回调函数来绑定任何事件,或者使用标准的jQuery.on()方法来绑定事件。

在参数中调用的示例:

$('#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):一个节点被checked。

nodeCollapsed (event, node):一个节点被折叠。

nodeDisabled (event, node):一个节点被禁用。

nodeEnabled (event, node):一个节点被启用。

nodeExpanded (event, node):一个节点被展开。

nodeSelected (event, node):一个节点被选择。

nodeUnchecked (event, node):一个节点被unchecked。

nodeUnselected (event, node):取消选择一个节点。

searchComplete (event, results):搜索完成之后触发。

searchCleared (event, results):搜索结果被清除之后触发。


简单例子:

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 当前节点

勾选当前节点递归勾选下面子节点

*/

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 当前节点

取消勾选当前节点递归取消下面子节点

*/

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);

});

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,599评论 18 139
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 6,305评论 0 6
  • 红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。 BST 二叉查找树(Binary...
    kanehe阅读 1,370评论 0 8
  • 总是要拥抱新天地的 总是要努力向前的 总是要为了自己的将来奋斗的 谢谢曾经受过的伤...
    月舞签阅读 120评论 0 0
  • 2015/08/19 有一种悲伤叫做“真的很无力”,那是在自己没有能力的情况下不得不做出的妥协; 有一种委屈叫做“...
    蒙奇奇_阿蒙蛮好的阅读 213评论 0 1