Bootstrap treeview實(shí)現(xiàn)動(dòng)態(tài)加載數(shù)據(jù)并添加快捷搜索功能
寫(xiě)在前面:
jQuery多級(jí)列表樹(shù)插件基于Bootstrap,以簡(jiǎn)單和優(yōu)雅的方式來(lái)顯示一些繼承樹(shù)結(jié)構(gòu),如視圖樹(shù)、列表樹(shù)等。
實(shí)用Bootstrap樹(shù)形菜單特效插件Bootstrap Tree View,非常不錯(cuò)的Bootstrap插件,現(xiàn)在很多Bootstrap制作的頁(yè)面都需要此功能,此插件需要Bootstrap3版本以及jQuery 2.0極以上版本支持,支持眾多參數(shù)自定義功能,顏色、背景色、圖標(biāo)、鏈接等,還是很不錯(cuò)的。
具體效果請(qǐng)暫時(shí)移步: http://jonmiles.github.io/bootstrap-treeview/
好了,話(huà)不多說(shuō),開(kāi)整。
要求用戶(hù)能夠快速查詢(xún)到省市區(qū)的區(qū)域名稱(chēng)信息(給用戶(hù)參考,用于規(guī)范書(shū)寫(xiě)導(dǎo)入模板),并且以樹(shù)形結(jié)構(gòu)展示。
最終效果展示:
一、 數(shù)據(jù)表結(jié)構(gòu) 數(shù)據(jù)源為省市區(qū)地域信息表,該表為自關(guān)聯(lián)結(jié)構(gòu)。如圖:
二、前臺(tái)頁(yè)面
1.頁(yè)面引入
<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.頁(yè)面展示區(qū)
<!-- 省市區(qū)地域查詢(xún)展示 -->
<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ǐng)輸入要查詢(xún)的省市區(qū)名稱(chēng)信息..." value="">
</div>
**_ <!-- 該部分為復(fù)選框,用于豐富搜索體驗(yàn),本文忽略
<div class="checkbox">
<label>
<input type="checkbox" class="checkbox" id="chk-ignore-case" value="false"/>
忽略大小寫(xiě)
</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ū)名稱(chēng)層級(jí)樹(shù)</h4>
<div id="treeview-searchable" class=""></div>
</div>
<div class="col-sm-4">
<h4>查詢(xún)結(jié)果展示</h4>
<div id="search-output"></div>
</div>
</div>
</div>
3.js 腳本
$(function () {
var defaultData;
$.ajax({
type: "post",
url: "項(xiàng)目請(qǐng)求路徑方法.json",
dataType: "json",
success: function (result) {
defaultData=result;
var initSearchableTree = function() {
return $('#treeview-searchable').treeview({
data: defaultData,
nodeIcon: 'glyphicon glyphicon-globe',
emptyIcon: '', //沒(méi)有子節(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ū)地域信息加載失敗!")
}
});
});
三、后臺(tái)主要代碼 后臺(tái)采用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ú)寫(xiě)方法到Service、Dao層查詢(xún))
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)動(dòng)態(tài)加載數(shù)據(jù)并添加快捷搜索功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言!
- Android TreeView實(shí)現(xiàn)帶復(fù)選框樹(shù)形組織結(jié)構(gòu)
- 對(duì)Python 窗體(tkinter)樹(shù)狀數(shù)據(jù)(Treeview)詳解
- bootstrap treeview 樹(shù)形菜單帶復(fù)選框及級(jí)聯(lián)選擇功能
- WPF自定義TreeView控件樣式實(shí)現(xiàn)QQ聯(lián)系人列表效果
- Android UI 之實(shí)現(xiàn)多級(jí)樹(shù)形列表TreeView示例
- JS樹(shù)形菜單組件Bootstrap TreeView使用方法詳解
- Bootstrap樹(shù)形菜單插件TreeView.js使用方法詳解
- 淺析BootStrap Treeview的簡(jiǎn)單使用
- GTK treeview原理及使用方法解析
相關(guān)文章
表單提交前觸發(fā)函數(shù)返回true表單才會(huì)提交
這篇文章主要介紹了表單提交前觸發(fā)函數(shù)當(dāng)返回true表單才會(huì)提交的具體實(shí)現(xiàn),需要的朋友可以參考下2014-03-03
Javascript異步編程async實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了Javascript異步編程async實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
JavaScript常用截取字符串的三種方式用法區(qū)別實(shí)例解析
本文給大家分享JavaScript常用截取字符串的三種方式及每種用法的區(qū)別解析,感興趣的朋友跟隨腳本之家小編一起看看吧2018-05-05
兼容FF和IE的動(dòng)態(tài)table示例自寫(xiě)
Js實(shí)現(xiàn)的動(dòng)態(tài)增加表格的文章有很多,但大多數(shù)都不兼容FF和IE,于是手寫(xiě)了一個(gè),經(jīng)測(cè)試效果還不錯(cuò),特此與大家分享,感興趣的朋友不要錯(cuò)過(guò)2013-10-10
挺實(shí)用的20個(gè)JavaScript簡(jiǎn)化寫(xiě)法代碼技巧
掌握一些JavaScript的精簡(jiǎn)書(shū)寫(xiě)方式,有助增強(qiáng)代碼的閱讀性,提升代碼質(zhì)量,任何一種編程語(yǔ)言的簡(jiǎn)寫(xiě)小技巧都是為了幫助你寫(xiě)出更簡(jiǎn)潔、更完善的代碼,讓你用更少的編碼實(shí)現(xiàn)你的需求2023-08-08
利用hasOwnProperty給數(shù)組去重的面試題分享
obj.hasOwnProperty(attr) 判斷是否是原型中的屬性,false就是原型中的屬性,下面這篇文章主要給大家介紹了一道利用hasOwnProperty給數(shù)組去重的面試題,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-11-11
手寫(xiě)TypeScript?時(shí)很多人常犯的幾個(gè)錯(cuò)誤
這篇文章主要介紹了手寫(xiě)TypeScript?時(shí)很多人常犯的幾個(gè)錯(cuò)誤,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的抽卡,重要的朋友可以參考一下2022-09-09
swiper.js插件實(shí)現(xiàn)pc端文本上下滑動(dòng)功能示例
這篇文章主要介紹了swiper.js插件實(shí)現(xiàn)pc端文本上下滑動(dòng)功能,結(jié)合實(shí)例形式分析了swiper.js插件的具體引用與相關(guān)使用技巧,需要的朋友可以參考下2018-12-12

