改造layui-樹(tree)元件支援樹的關鍵字搜尋操作
效果如下:
一個不支援關鍵字搜尋的樹不是一個德智體美全面發展的好樹,看了layui原始碼後發現官方其實提供了tree的搜尋功能
找到tree.js檔案在基礎配置這裡發現showSearch,原來官方把這裡註釋掉了,放開註釋就行(我下的版本里是註釋掉的,可以看看自己的版本如果沒有可以自己加上就行)
接下來我們在當前頁面搜showSearch欄位找到如下
可以看到在樹上面自己新增了一個搜尋框,所以當我們showSearch設為true的時候不用自己寫搜尋框
然後全域性搜layui-tree-search找到監聽搜尋輸入框輸入的方法
官方自己寫的方法我做了調整,因為我們希望搜尋完成後樹自動展開,所以我自己加了幾行程式碼使結果樹展開
下面是修改後的所有程式碼
//搜尋
that.elem.find('.layui-tree-search').on('keyup', function() {
var input = $(this),
val = input.val(),
pack = input.nextAll(),
arr = [];
//遍歷所有的值
pack.find('.' + ELEM_TEXT).each(function() {
var entry = $(this).parents('.' + ELEM_ENTRY);
//若值匹配,加一個類以作標識
if ($(this).html().indexOf(val) != -1) {
arr.push($(this).parent());
var parentNode = $(pack).find('.layui-icon.layui-icon-addition');
if (parentNode.length > 0) {
parentNode.each(function() {
$(this).attr('class', 'layui-icon layui-icon-subtraction');
})
}
var select = function(div) {
div.addClass('layui-tree-searchShow layui-tree-spread');
$(div.parent('.' + ELEM_PACK)[0]).css('display', 'block');
//向上父節點渲染
if (div.parent('.' + ELEM_PACK)[0]) {
select(div.parent('.' + ELEM_PACK).parent('.' + ELEM_SET));
};
};
select(entry.parent('.' + ELEM_SET));
};
});
//根據標誌剔除
pack.find('.' + ELEM_ENTRY).each(function() {
var parent = $(this).parent('.' + ELEM_SET);
if (!parent.hasClass('layui-tree-searchShow')) {
parent.addClass(HIDE);
};
});
if (pack[0].className.indexOf('layui-tree-searchShow') == -1 && pack.find('.layui-tree-searchShow').length == 0) {
that.elem.append(that.elemNone);
};
//節點過濾的回撥
options.onsearch && options.onsearch({
elem: arr
});
});
//還原搜尋初始狀態
that.elem.find('.layui-tree-search').on('keydown', function() {
$(this).nextAll().find('.' + ELEM_ENTRY).each(function() {
var parent = $(this).parent('.' + ELEM_SET);
parent.removeClass('layui-tree-searchShow ' + HIDE);
});
if ($('.layui-tree-emptyText')[0]) $('.layui-tree-emptyText').remove();
});
原始碼我改過也沒儲存大概就是這個區域的程式碼,可以自行對比區別
使用:最後只要在初始化樹的時候設定showSearch為true
相關文章
- 改造layui-樹(tree)元件的新增、編輯、刪除操作(補充上一篇)UI元件
- 二分搜尋樹(Binary Search Tree)
- 二叉搜尋樹的操作集
- 扁平樹狀資料處理及多層關鍵字搜尋實現
- The order of a Tree (二叉搜尋樹+先序遍歷)
- 二叉搜尋樹(Binary Search Tree)(Java實現)Java
- 1688關鍵字搜尋介面
- 搜尋Oracle DDL中的關鍵字Oracle
- 701. 二叉搜尋樹中的插入操作
- 6-12 二叉搜尋樹的操作集
- JavaScript 搜尋關鍵字高亮效果JavaScript
- Idea全域性搜尋關鍵字Idea
- 二分搜尋樹系列之[ 插入操作 (insert) ]
- 二分搜尋樹系列之「 插入操作 (insert) 」
- Trie|如何用字典樹實現搜尋引擎的關鍵詞提示功能
- 二叉搜尋樹
- 1688關鍵字搜尋新品資料API介面(item_search_new-按關鍵字搜尋新品API
- 如何在Java中實現二叉搜尋樹( binary search tree)?Java
- 1688關鍵字搜尋介面測試
- 96不同的二查搜尋樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- vue2實現搜尋結果中的搜尋關鍵字高亮Vue
- Avalonia下拉可搜尋樹(TreeComboBox)
- 【資料結構】搜尋樹資料結構
- Qt之股票元件-股票檢索--支援搜尋結果預覽、滑鼠、鍵盤操作QT元件
- 按關鍵字搜尋dangdang商品返回展示
- item_search - 按關鍵字搜尋商品
- 二叉搜尋樹的結構
- 二分搜尋樹元素的插入
- Day20 | 654.最大二叉樹 、 617.合併二叉樹 、 700.二叉搜尋樹中的搜尋 98.驗證二叉搜尋樹二叉樹
- 看動畫學演算法之:平衡二叉搜尋樹AVL Tree動畫演算法
- BST(二叉搜尋樹)、AVL樹、紅黑樹、2-3樹、B樹、B+樹、LSM樹、Radix樹比較
- 關於樹的資料結構(二分搜尋樹,堆和優先佇列)資料結構佇列
- Leetcode 700. 二叉搜尋樹中的搜尋(DAY 2)LeetCode
- 從二分搜尋到二叉搜尋樹
- 二叉搜尋樹和二叉樹的最近公共祖先二叉樹
- 如何高效利用 GitHub 關鍵字進行搜尋Github
- 二叉搜尋樹的python實現Python