寫在前面:
jQuery多級列表樹插件基于Bootstrap,以簡單和優(yōu)雅的方式來顯示一些繼承樹結(jié)構(gòu),如視圖樹、列表樹等。
實(shí)用Bootstrap樹形菜單特效插件Bootstrap Tree View,非常不錯的Bootstrap插件,現(xiàn)在很多Bootstrap制作的頁面都需要此功能,此插件需要Bootstrap3版本以及jQuery 2.0極以上版本支持,支持眾多參數(shù)自定義功能,顏色、背景色、圖標(biāo)、鏈接等,還是很不錯的。
具體效果請暫時移步: http://jonmiles.github.io/bootstrap-treeview/
好了,話不多說,開整。
要求用戶能夠快速查詢到省市區(qū)的區(qū)域名稱信息(給用戶參考,用于規(guī)范書寫導(dǎo)入模板),并且以樹形結(jié)構(gòu)展示。
最終效果展示:
一、 數(shù)據(jù)表結(jié)構(gòu) 數(shù)據(jù)源為省市區(qū)地域信息表,該表為自關(guān)聯(lián)結(jié)構(gòu)。如圖:
二、前臺頁面
1.頁面引入
<link rel="stylesheet" href="項(xiàng)目靜態(tài)資源路徑/bootstrap-treeview/css/bootstrap.css" rel="external nofollow" > <script type="text/javascript" src="項(xiàng)目靜態(tài)資源路徑/js/jquery/3.1.0/jquery-3.1.0.min.js"></script> <script type="text/javascript" src="項(xiàng)目靜態(tài)資源路徑/bootstrap/bootstrap.js"></script> <script type="text/javascript" src="項(xiàng)目靜態(tài)資源路徑/bootstrap-treeview/js/jquery.js"></script> <script type="text/javascript" src="項(xiàng)目靜態(tài)資源路徑/bootstrap-treeview/js/bootstrap-treeview.js"> </script>
2.頁面展示區(qū)
<!-- 省市區(qū)地域查詢展示 --> <div class="container"> <div class="row"> <div class="col-sm-4"> <h4>快捷搜索</h4> <!-- <form> --> <div class="form-group"> <label for="input-search" class="sr-only">快捷搜索:</label> <input type="input" class="form-control" id="input-search" placeholder="請輸入要查詢的省市區(qū)名稱信息..." value=""> </div> **_ <!-- 該部分為復(fù)選框,用于豐富搜索體驗(yàn),本文忽略 <div class="checkbox"> <label> <input type="checkbox" class="checkbox" id="chk-ignore-case" value="false"/> 忽略大小寫 </label> </div> <div class="checkbox"> <label> <input type="checkbox" class="checkbox" id="chk-exact-match" value="false"> 準(zhǔn)確匹配 </label> </div> <div class="checkbox"> <label> <input type="checkbox" class="checkbox" id="chk-reveal-results" value="false"> 顯示結(jié)果 </label> </div> -->_** <button type="button" class="btn btn-success" id="btn-search">搜索</button> <button type="button" class="btn btn-default" id="btn-clear-search">清除</button> <!-- </form> --> </div> <div class="col-sm-4"> <h4>省市區(qū)名稱層級樹</h4> <div id="treeview-searchable" class=""></div> </div> <div class="col-sm-4"> <h4>查詢結(jié)果展示</h4> <div id="search-output"></div> </div> </div> </div>
3.js 腳本
$(function () { var defaultData; $.ajax({ type: "post", url: "項(xiàng)目請求路徑方法.json", dataType: "json", success: function (result) { defaultData=result; var initSearchableTree = function() { return $('#treeview-searchable').treeview({ data: defaultData, nodeIcon: 'glyphicon glyphicon-globe', emptyIcon: '', //沒有子節(jié)點(diǎn)的節(jié)點(diǎn)圖標(biāo) //collapsed: true, }); }; var $searchableTree = initSearchableTree(); $('#treeview-searchable').treeview('collapseAll', { silent : false//設(shè)置初始化節(jié)點(diǎn)關(guān)閉 }); var findSearchableNodes = function() { return $searchableTree.treeview('search', [ $.trim($('#input-search').val()), { ignoreCase: false, exactMatch: false } ]); }; var searchableNodes = findSearchableNodes(); // Select/unselect/toggle nodes $('#input-search').on('keyup', function (e) { var str = $('#input-search').val(); if($.trim(str).length>0){ searchableNodes = findSearchableNodes(); } else { $('#treeview-searchable').treeview('collapseAll', { silent : false //設(shè)置初始化節(jié)點(diǎn)關(guān)閉 }); } //$('.select-node').prop('disabled', !(searchableNodes.length >= 1)); }); var search = function(e) { var pattern = $.trim($('#input-search').val()); var options = { ignoreCase: $('#chk-ignore-case').is(':checked'), exactMatch: $('#chk-exact-match').is(':checked'), revealResults: $('#chk-reveal-results').is(':checked') }; var results = $searchableTree.treeview('search', [ pattern, options ]); var output = '<p>' + results.length + ' 匹配的搜索結(jié)果</p>'; $.each(results, function (index, result) { output += '<p>- <span style="color:red;">' + result.text + '</span></p>'; }); $('#search-output').html(output); } $('#btn-search').on('click', search); $('#input-search').on('keyup', search); $('#btn-clear-search').on('click', function (e) { $searchableTree.treeview('clearSearch'); $('#input-search').val(''); $('#search-output').html(''); $('#treeview-searchable').treeview('collapseAll', { silent : false//設(shè)置初始化節(jié)點(diǎn)關(guān)閉 }); }); }, error: function () { alert("省市區(qū)地域信息加載失敗!") } }); });
三、后臺主要代碼 后臺采用SpringMVC+Spring+Mybatis框架, 以下為Controller層代碼
@ResponseBody @RequestMapping(value = "/queryAreaInfo", method = { RequestMethod.POST }, produces = MediaType.APPLICATION_JSON_VALUE) public List<Object> queryAreaInfo() { List<AreaVO> areaInfo=new ArrayList<>(); try { //獲取緩存中的省市區(qū)信息(本項(xiàng)目直接從緩存中獲取,也可以單獨(dú)寫方法到Service、Dao層查詢) EcncSysConfig sysConfig = new EcncSysConfig(); areaInfo = sysConfig.INIT_SYS_ECNC_AREAVO; } catch (Throwable e) { e.printStackTrace(); } //盛放省份 List<Object> result=new ArrayList<>(); for (AreaVO areaVO : areaInfo) { Map<String, Object> map= new HashMap<>(); if("2".equals(areaVO.getGrade())){ map.put("text", areaVO.getName()); //盛放地市 List<Object> cList=new ArrayList<>(); for (AreaVO cVO : areaInfo) { Map<String, Object> cMap=new HashMap<>(); if (cVO.getParentId() != null && cVO.getParentId().equals(areaVO.getId())) { cMap.put("text", cVO.getName()); //盛放區(qū)縣 List<Object> rList=new ArrayList<>(); for (AreaVO rVO : areaInfo) { Map<String, Object> rMap=new HashMap<>(); if (cVO.getId().equals(rVO.getParentId())) { rMap.put("text", rVO.getName()); rList.add(rMap); } } cMap.put("nodes", rList); cList.add(cMap); } } map.put("nodes", cList); result.add(map); } } return result; }
總結(jié)
以上所述是小編給大家介紹的Bootstrap treeview實(shí)現(xiàn)動態(tài)加載數(shù)據(jù)并添加快捷搜索功能,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言!
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com