淺析使用BootStrap TreeView插件實(shí)現(xiàn)靈活配置快遞模板
bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多級(jí)列表樹插件。該jQuery插件基于Twitter Bootstrap,以簡(jiǎn)單和優(yōu)雅的方式來(lái)顯示一些繼承樹結(jié)構(gòu),如視圖樹、列表樹等等。
開發(fā)條件:
安裝bootstrap-treeview插件,具體操作見:
實(shí)現(xiàn)功能:
1.一個(gè)模板可指定子模板(包含多個(gè)地區(qū)、價(jià)格等)
2.編輯子模板地區(qū)時(shí),動(dòng)態(tài)改變tree的地區(qū)(其他子模板選中的地區(qū)disabled,此模板之前選中的地區(qū)默認(rèn)選中)
3.tree選擇時(shí),父級(jí)和子集的聯(lián)動(dòng)(如父級(jí)選中子集全部選中,取消一個(gè)子集的時(shí)候,父級(jí)也取消)
4.維護(hù)子模板數(shù)據(jù)(展示選中的地區(qū)格式 如(安徽、北京(昌平 回龍觀)) 存儲(chǔ)選中節(jié)點(diǎn))
其他說(shuō)明
數(shù)據(jù)源格式:[{text:'展示名稱1',nodes:[{text:'子級(jí)'}]},{text:'展示名稱2'}]
bootstrap-trview會(huì)動(dòng)態(tài)的為數(shù)據(jù)源添加nodeId,parentId這兩個(gè)屬性(很重要的屬性),可自定義添加其他屬性用來(lái)標(biāo)記當(dāng)前節(jié)點(diǎn)
編輯過(guò)程中維護(hù)的數(shù)據(jù)
數(shù)組對(duì)象templates包含:
1.模板的名稱
2.每個(gè)子模板對(duì)應(yīng)的 價(jià)格 件數(shù) 排序
3.子模板的地區(qū)Id、節(jié)點(diǎn)id、展示名稱
實(shí)現(xiàn)上述數(shù)據(jù)需要維護(hù)的數(shù)組和對(duì)象
var templates = []; //保存最終儲(chǔ)存的數(shù)據(jù) var selectedNodeId = []; //用來(lái)存儲(chǔ)單個(gè)模板選擇的nodeId 用于展示 var editingTemplate = null; //用于標(biāo)記正在處理的是第幾個(gè)地區(qū)模板 var selectedAreaId = []; //保存當(dāng)前選擇的地區(qū) var selectedAreaName = []; //保存當(dāng)前選中的地區(qū)名稱用于展示 var defaultData = [];//數(shù)據(jù)源
實(shí)現(xiàn)功能一
一個(gè)模板指定多個(gè)子模板
主要是維護(hù)templates[]數(shù)組 push進(jìn)入多個(gè)template即可 下面會(huì)詳細(xì)講解如何維護(hù)template
實(shí)現(xiàn)功能二(動(dòng)態(tài)修改tree)
原理:通過(guò)維護(hù)的templates和editingTemplate 拿到當(dāng)前編輯的子模板數(shù)據(jù)和其他子模板數(shù)據(jù),將當(dāng)前模板的node默認(rèn)選中,其他的數(shù)據(jù)置為disabled
編輯子模板
uncheckAll方法:$('#tree').treeview('uncheckAll', { silent: true });
disAbled方法:$('#tree').treeview('disableNode', [ nodeId, { silent: true } ]);
默認(rèn)選中的方法$('#tree').treeview('checkNode', [ template.nodeIds[i], { silent: true } ]);
實(shí)現(xiàn)功能三:父級(jí)和子級(jí)的聯(lián)動(dòng)(主要操作在點(diǎn)擊選中和取消選中上面 來(lái)分析兩種情況)
第一種 選中
1.選擇父節(jié)點(diǎn) 將子節(jié)點(diǎn)全部選中
根據(jù)父節(jié)點(diǎn)返回的nodes得到所有的子節(jié)點(diǎn) 并且將子節(jié)點(diǎn)全部選中
選中的方法$('#tree').treeview('checkNode', [ nodeId, { silent: true } ]);
可以封裝為一個(gè)方法selectAllChildren()
2.如果選中的為子節(jié)點(diǎn)
判斷父節(jié)點(diǎn)中的子節(jié)點(diǎn)是否全部選中如果全部選中則將父節(jié)點(diǎn)選中
第二種 取消
1.選中的為父節(jié)點(diǎn),將所有的子節(jié)點(diǎn)取消選中
取消選中的方法$('#tree').treeview('uncheckNode', [ nodeId, { silent: true } ]);
2選中的為子節(jié)點(diǎn),判斷父節(jié)點(diǎn)中的子節(jié)點(diǎn)是否選中 如果選中 則取消選中
判斷是否選中的方法
$('#tree').treeview('selectNode', [ nodeId, { silent: true } ]);
根據(jù)獲取到元素獲取是否選中
實(shí)現(xiàn)功能四(維護(hù)template數(shù)據(jù))
1.正在編輯的editingTemplate
2.當(dāng)前層級(jí)選中的所有selectedNodeId
3.展示需要的字符串?dāng)?shù)組selectedNodeName
3.存儲(chǔ)字符串?dāng)?shù)組selectedAreaId對(duì)應(yīng)數(shù)據(jù)庫(kù)中的areaId
4.將上面的三個(gè)數(shù)組存入template,并將template push進(jìn)入templates
邏輯
1.獲取到所有的被選中的元素
2.遍歷所有的元素 判斷當(dāng)前節(jié)點(diǎn)是否有nodes(即子元素),如果有則直接操作,并改變index,將其子元素全部跳過(guò),將節(jié)點(diǎn)名稱保存進(jìn)areaNames,如"安徽"
3.遍歷所有的元素 如果沒有子元素,取出父級(jí)元素如"北京(",將node元素添加至后面,如"北京(昌平區(qū)",判斷下一個(gè)元素的父節(jié)點(diǎn)是否發(fā)生改變,如果發(fā)生改變則結(jié)束維護(hù)字符串為"北京(昌平區(qū))",并將其添加至areaNames,繼續(xù)遍歷下一個(gè)節(jié)點(diǎn)
4.其他三個(gè)數(shù)組在遍歷的同時(shí)維護(hù)
實(shí)現(xiàn)結(jié)果展示:
1.主頁(yè)面展示:
2.tree展示:
小結(jié)
本文提供簡(jiǎn)單的實(shí)現(xiàn)方案思路,具體的代碼根據(jù)業(yè)務(wù)實(shí)現(xiàn),不足之處不能動(dòng)態(tài)處理數(shù)據(jù)源,優(yōu)點(diǎn)bootstrap開放的api接口較多,可自定義實(shí)現(xiàn)。
以上所述是小編給大家介紹的使用BootStrap TreeView插件實(shí)現(xiàn)靈活配置快遞模板,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- bootstrap treeview 擴(kuò)展addNode方法動(dòng)態(tài)添加子節(jié)點(diǎn)的方法
- BootStrap TreeView使用實(shí)例詳解
- bootstrap插件treeview實(shí)現(xiàn)全選父節(jié)點(diǎn)下所有子節(jié)點(diǎn)和反選功能
- JS樹形菜單組件Bootstrap TreeView使用方法詳解
- 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)文章
微信小程序使用map組件實(shí)現(xiàn)解析經(jīng)緯度功能示例
這篇文章主要介紹了微信小程序使用map組件實(shí)現(xiàn)解析經(jīng)緯度功能,涉及微信小程序map組件結(jié)合高德地圖進(jìn)行經(jīng)緯度獲取相關(guān)操作技巧,需要的朋友可以參考下2019-01-01D3.js實(shí)現(xiàn)簡(jiǎn)潔實(shí)用的動(dòng)態(tài)儀表盤的示例
本篇文章主要介紹了D3.js實(shí)現(xiàn)簡(jiǎn)潔實(shí)用的動(dòng)態(tài)儀表盤的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04window.location.href和window.open窗口跳轉(zhuǎn)區(qū)別解析
這篇文章主要為大家介紹了window.location.href和window.open 跳轉(zhuǎn)區(qū)別解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07一款js和css代碼壓縮工具[附JAVA環(huán)境配置方法]
壓縮css和js是我們工作中經(jīng)常要處理的一件事,這里介紹的是一款基于YUICompressor,淘寶封裝的css和js壓縮工具TBCompressor.2010-04-04基于JavaScript實(shí)現(xiàn)活動(dòng)倒計(jì)時(shí)效果
這篇文章主要為大家詳細(xì)介紹了基于JavaScript實(shí)現(xiàn)活動(dòng)倒計(jì)時(shí)效果,距離活動(dòng)時(shí)間還剩多少,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04JavaScript實(shí)現(xiàn)url參數(shù)轉(zhuǎn)成json形式
這篇文章主要介紹了JavaScript實(shí)現(xiàn)url參數(shù)轉(zhuǎn)成json形式的相關(guān)代碼,有喜歡的小伙伴可以參考下2016-09-09js之完全兼容ie與firefox的拖動(dòng)層代碼[測(cè)試好用]
經(jīng)測(cè)試,這個(gè)拖到效果不錯(cuò),多瀏覽器支持。方便做網(wǎng)站的朋友使用2008-10-10詳解如何通過(guò)JavaScript實(shí)現(xiàn)函數(shù)重載
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)JavaScript實(shí)現(xiàn)函數(shù)重載,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)JavaScript有一定的幫助,感興趣的可以了解一下2023-01-01JavaScript對(duì)象與JSON格式的轉(zhuǎn)換及JSON.stringify和JSON.parse的使用方法
這篇文章主要介紹了JavaScript對(duì)象與JSON格式的轉(zhuǎn)換及JSON.stringify和JSON.parse的使用方法,JSON是JavaScript表達(dá)值和對(duì)象的通用數(shù)據(jù)格式,其本質(zhì)就是符合一定規(guī)范的字符串2022-07-07