bootstrap插件treeview實(shí)現(xiàn)全選父節(jié)點(diǎn)下所有子節(jié)點(diǎn)和反選功能
項(xiàng)目需要實(shí)現(xiàn)權(quán)限管理,使用前端框架bootstrap,所以就直接選用了bootstrap的treeview擴(kuò)展插件。先上圖:

選中父節(jié)點(diǎn)時(shí),父節(jié)點(diǎn)下所有子節(jié)點(diǎn)也都全部選中,看代碼
1、HTML代碼
<h2>TreeView Checkable</h2> <div id="treeview-checkable"></div>
2、Json數(shù)據(jù)
function getTvStateData() {
var defaultData = [
{
text: 'Parent 1',
href: '#parent1',
tags: ['4'],
state: {
checked: true
},
nodes: [
{
text: 'Child 1',
href: '#child1',
tags: ['2'],
nodes: [
{
text: 'Grandchild 1',
href: '#grandchild1',
tags: ['0']
},
{
text: 'Grandchild 2',
href: '#grandchild2',
tags: ['0']
}
]
},
{
text: 'Child 2',
href: '#child2',
tags: ['0']
}
]
},
{
text: 'Parent 2',
href: '#parent2',
tags: ['0'],
nodes: [
{
text: 'Child 1',
href: '#child1',
tags: ['2'],
nodes: [
{
text: 'Grandchild 1',
href: '#grandchild1',
tags: ['0']
},
{
text: 'Grandchild 2',
href: '#grandchild2',
tags: ['0']
}
]
},
{
text: 'Child 2',
href: '#child2',
tags: ['0']
}
]
},
{
text: 'Parent 3',
href: '#parent3'
},
{
text: 'Parent 4',
href: '#parent4',
tags: ['0']
},
{
text: 'Parent 5',
href: '#parent5',
tags: ['0']
}
];
return defaultData;
}
3、JS數(shù)據(jù)綁定,加載TreeView
$(function() {
var $checkableTree = $('#treeview-checkable')
.treeview({
data: getTvStateData(), //數(shù)據(jù)
showIcon: false,
showCheckbox: true,
levels: 1,
onNodeChecked: function(event, node) { //選中節(jié)點(diǎn)
var selectNodes = getChildNodeIdArr(node); //獲取所有子節(jié)點(diǎn)
if (selectNodes) { //子節(jié)點(diǎn)不為空,則選中所有子節(jié)點(diǎn)
$('#treeview-checkable').treeview('checkNode', [selectNodes, { silent: true }]);
}
var parentNode = $("#treeview-checkable").treeview("getNode", node.parentId);
setParentNodeCheck(node);
},
onNodeUnchecked: function(event, node) { //取消選中節(jié)點(diǎn)
var selectNodes = getChildNodeIdArr(node); //獲取所有子節(jié)點(diǎn)
if (selectNodes) { //子節(jié)點(diǎn)不為空,則取消選中所有子節(jié)點(diǎn)
$('#treeview-checkable').treeview('uncheckNode', [selectNodes, { silent: true }]);
}
},
onNodeExpanded:
function(event, data) {
if (data.nodes === undefined || data.nodes === null) {
} else if (data.tags[0] === "2") {
alert("Tags 2");
} else {
alert("1111");
}
}
});
});
4、選中/取消選中父節(jié)點(diǎn)時(shí),選中/取消選中所有子節(jié)點(diǎn),以及選中所有子節(jié)點(diǎn)時(shí),選中父節(jié)點(diǎn)
function getChildNodeIdArr(node) {
var ts = [];
if (node.nodes) {
for (x in node.nodes) {
ts.push(node.nodes[x].nodeId);
if (node.nodes[x].nodes) {
var getNodeDieDai = getChildNodeIdArr(node.nodes[x]);
for (j in getNodeDieDai) {
ts.push(getNodeDieDai[j]);
}
}
}
} else {
ts.push(node.nodeId);
}
return ts;
}
function setParentNodeCheck(node) {
var parentNode = $("#treeview-checkable").treeview("getNode", node.parentId);
if (parentNode.nodes) {
var checkedCount = 0;
for (x in parentNode.nodes) {
if (parentNode.nodes[x].state.checked) {
checkedCount ++;
} else {
break;
}
}
if (checkedCount === parentNode.nodes.length) {
$("#treeview-checkable").treeview("checkNode", parentNode.nodeId);
setParentNodeCheck(parentNode);
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- bootstrap treeview 擴(kuò)展addNode方法動(dòng)態(tài)添加子節(jié)點(diǎn)的方法
- BootStrap TreeView使用實(shí)例詳解
- JS樹形菜單組件Bootstrap TreeView使用方法詳解
- 淺析使用BootStrap TreeView插件實(shí)現(xiàn)靈活配置快遞模板
- Bootstrap樹形菜單插件TreeView.js使用方法詳解
- 淺析BootStrap Treeview的簡(jiǎn)單使用
- 基于MVC5和Bootstrap的jQuery TreeView樹形控件(二)之?dāng)?shù)據(jù)支持json字符串、list集合
- 基于MVC5和Bootstrap的jQuery TreeView樹形控件(一)之?dāng)?shù)據(jù)支持json字符串、list集合
- bootstrap-treeview自定義雙擊事件實(shí)現(xiàn)方法
- bootstrap-Treeview實(shí)現(xiàn)級(jí)聯(lián)勾選
相關(guān)文章
JavaScript通過(guò)filereader接口讀取文件
這篇文章主要為大家詳細(xì)介紹了通過(guò)filereader接口讀取文件,使用readAsDataURL方法預(yù)覽圖片的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Json對(duì)象和字符串互相轉(zhuǎn)換json數(shù)據(jù)拼接和JSON使用方式詳細(xì)介紹(小結(jié))
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式.這篇文章主要介紹了Json對(duì)象和字符串互相轉(zhuǎn)換json數(shù)據(jù)拼接和JSON使用方式詳細(xì)介紹(小結(jié))的相關(guān)資料,需要的朋友可以參考下2016-10-10
用js控件div的滾動(dòng)條,讓它在內(nèi)容更新時(shí)自動(dòng)滾到底部的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇用js控件div的滾動(dòng)條,讓它在內(nèi)容更新時(shí)自動(dòng)滾到底部的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10
基于JavaScript實(shí)現(xiàn)一個(gè)簡(jiǎn)單的事件觸發(fā)器
這篇文章主要為大家詳細(xì)介紹了如何使用JavaScript實(shí)現(xiàn)一個(gè)簡(jiǎn)單的事件觸發(fā)器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
JS實(shí)現(xiàn)audio音頻剪裁剪切復(fù)制播放與上傳(步驟詳解)
這篇文章主要介紹了JS實(shí)現(xiàn)audio音頻剪裁剪切復(fù)制播放與上傳,本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
JS首屏加載時(shí)間優(yōu)化的解決方法總結(jié)
首屏加載時(shí)間是一個(gè)衡量網(wǎng)頁(yè)性能和用戶體驗(yàn)的關(guān)鍵指標(biāo),這個(gè)問(wèn)題無(wú)論是在面試中還是在項(xiàng)目開(kāi)發(fā)中都占有極其高的權(quán)重,本文為大家整理了幾種JS中優(yōu)化首屏加載時(shí)間的方法,希望對(duì)大家有所幫助2024-02-02

