combobox和combotree模糊查詢

来源:http://www.cnblogs.com/gcjava/archive/2017/04/16/6720268.html
-Advertisement-
Play Games

First First Second Second ...


  • First

/** 
 * combobox和combotree模糊查詢
 * combotree 結果顯示兩級父節點(手動設置數量)
 * 鍵盤上下鍵選擇葉子節點
 * 鍵盤迴車鍵設置文本的值
 */
(function(){
    //combobox可編輯,自定義模糊查詢  
    $.fn.combobox.defaults.editable = true;  
    $.fn.combobox.defaults.filter = function(q, row){  
        var opts = $(this).combobox('options');  
        return row[opts.textField].indexOf(q) >= 0;  
    };  
    //combotree可編輯,自定義模糊查詢  
    $.fn.combotree.defaults.editable = true;
    //選中行索引
    var leafBlockIndex=0;
    //當前選中行索引
    var nowLeafBlockIndex=-1;
    //combotree 組件
    var    comboTree=null;
    //葉子節點DOM Array
    var leafBlocks=null;;
    //將所有的結果葉子節點放入 DOM Array中
    function getDOMArray(data){
        comboTree = $(data).combotree('tree');
        leafBlocks=new Array();
        var leafs = comboTree.tree('getChildren');
        for (var i = 0; i < leafs.length; i++) {
            var leaf = leafs[i];
            var dis =$(leaf.target).css('display')+'';
            if('block' == dis){
                if(comboTree.tree('isLeaf',leaf.target)){
                    leafBlocks.push(leaf.target);
                }
            }
        }; 
    };
    //-------------------------------------
    $.extend($.fn.combotree.defaults.keyHandler,{  
        up:function(e){
            leafBlockIndex=nowLeafBlockIndex;
            leafBlockIndex--;
            getDOMArray(this);
            if(leafBlockIndex <0){
                leafBlockIndex=leafBlocks.length-1;
            }
            comboTree.tree('select',leafBlocks[leafBlockIndex]);
//            easyui 1.3.4版開始可用
//            comboTree.tree('scrollTo',leafBlocks[leafBlockIndex]);
            nowLeafBlockIndex=leafBlockIndex;
        },
        down:function(e){
            leafBlockIndex=nowLeafBlockIndex;
            leafBlockIndex++;
            getDOMArray(this);
            if(leafBlockIndex >= leafBlocks.length){
                leafBlockIndex=0;
            }
            comboTree.tree('select',leafBlocks[leafBlockIndex]);
//            easyui 1.3.4版開始可用
//            comboTree.tree('scrollTo',leafBlocks[leafBlockIndex]);
            nowLeafBlockIndex=leafBlockIndex;
        },
        left: function(e){
            console.log('left');
//            var val = $(this).combo('getText');
//            $(this).combo('setText',val+' ');
        },
        right: function(e){
            console.log('right');
//            var val = $(this).combo('getText');
//            console.log(val);
//            $(this).combo('setText',val+' ');
        },
        enter:function(e){
            var leaf =$(leafBlocks[nowLeafBlockIndex]);
            var value =leaf.children('span').last().text();
            $(this).combo('setText',value);
            $(this).combo('hidePanel')
        },  
        query:function(q){
            var t = $(this).combotree('tree');  
            var nodes = t.tree('getChildren');  
            for(var i=0; i<nodes.length; i++){ 
                var node = nodes[i];  
                if (node.text.indexOf(q) >= 0){  
                    $(node.target).show();
                    var parent=t.tree('getParent',node.target);
                    if(parent){
                        $(parent.target).show();
                        if(parent){
                            parent=t.tree('getParent',parent.target);
                            $(parent.target).show();
                        }
                    }
                } else {  
                    $(node.target).hide();  
                }  
            }  
            var opts = $(this).combotree('options');  
            if (!opts.hasSetEvents){
                opts.hasSetEvents = true;  
                var onShowPanel = opts.onShowPanel;  
                opts.onShowPanel = function(){  
                    var nodes = t.tree('getChildren');  
                    for(var i=0; i<nodes.length; i++){  
                        $(nodes[i].target).show();  
                    }  
                    onShowPanel.call(this);  
                };  
                $(this).combo('options').onShowPanel = opts.onShowPanel;  
            }
        }
    });
})(jQuery); 

 

  • Second

(function ($) {
    //combotree可編輯,自定義模糊查詢  
    $.fn.combotree.defaults.editable = true;
    $.extend($.fn.combotree.defaults.keyHandler, {
        query: function (q) {
            var t = $(this).combotree('tree');
            t.tree("search", q);
        }
    });
    $.extend($.fn.tree.methods, {           /**   
         * 擴展easyui tree的搜索方法 
         * @param tree easyui tree的根DOM節點(UL節點)的jQuery對象          * @param searchText 檢索的文本 
         * @param this-context easyui tree的tree對象          */
        search: function (jqTree, searchText) {
            //easyui tree的tree對象。可以通過tree.methodName(jqTree)方式調用easyui tree的方法 
            var tree = this;
            //獲取所有的樹節點 
            var nodeList = getAllNodes(jqTree, tree);
            //如果沒有搜索條件,則展示所有樹節點       
            searchText = $.trim(searchText);
            if (searchText == "") {
                for (var i = 0; i < nodeList.length; i++) {
                    $(".tree-node-targeted",
                nodeList[i].target).removeClass("tree-node-targeted");
                    $(nodeList[i].target).show();
                }
                //展開已選擇的節點(如果之前選擇了)            
                var selectedNode = tree.getSelected(jqTree);
                if (selectedNode) {
                    tree.expandTo(jqTree, selectedNode.target);
                }
                return;
            }
            //搜索匹配的節點並高亮顯示            
            var matchedNodeList = [];
            if (nodeList && nodeList.length > 0) {
                var node = null;
                for (var i = 0; i < nodeList.length; i++) {
                    node = nodeList[i];
                    if (isMatch(searchText, node.text)) {
                        matchedNodeList.push(node);
                    }
                }
                //隱藏所有節點 
                for (var i = 0; i < nodeList.length; i++) {
                    $(".tree-node-targeted", nodeList[i].target).removeClass("tree-node-targeted");
                    $(nodeList[i].target).hide();
                }
                //摺疊所有節點 
                tree.collapseAll(jqTree);
                //展示所有匹配的節點以及父節點 


                for (var i = 0; i < matchedNodeList.length; i++) {
                    showMatchedNode(jqTree, tree, matchedNodeList[i]);
                }
            }
        },
        /**   
        * 展示節點的子節點(子節點有可能在搜索的過程中被隱藏了)        
        * @param node easyui tree節點         
        */
        showChildren: function (jqTree, node) {
            //easyui tree的tree對象。可以通過tree.methodName(jqTree)方式調用easyui tree的方法 
            var tree = this;
            //展示子節點 
            if (!tree.isLeaf(jqTree, node.target)) {
                var children = tree.getChildren(jqTree, node.target);
                if (children && children.length > 0) {
                    for (var i = 0; i < children.length; i++) {
                        if ($(children[i].target).is(":hidden")) {
                            $(children[i].target).show();
                        }
                    }
                }
            }
        },
        /**   
        * 將滾動條滾動到指定的節點位置,使該節點可見(如果有滾動條才滾動,沒有滾動條就不滾動) 
        * @param param {   
        * treeContainer: easyui tree的容器(即存在滾動條的樹容器)。如果為null,則取easyui tree的根UL節點的父節點。 
        * argetNode:  將要滾動到的easyui tree節點。如果targetNode為空,則預設滾動到當前已選中的節點,如果沒有選中的節點,則不滾動          * }             */
        scrollTo: function (jqTree, param) {
            //easyui tree的tree對象。可以通過tree.methodName(jqTree)方式調用easyui tree的方法 
            var tree = this;
            //如果node為空,則獲取當前選中的node   
            var targetNode = param && param.targetNode ? param.targetNode : tree.getSelected(jqTree);
            if (targetNode != null) {
                //判斷節點是否在可視區域                 var root = tree.getRoot(jqTree);   
                var $targetNode = $(targetNode.target);
                var Container = param && param.treeContainer ? param.treeContainer : jqTree.parent();
                var containerH = container.height();
                var nodeOffsetHeight = $targetNode.offset().top - container.offset().top;
                if (nodeOffsetHeight > (containerH - 30)) {
                    var scrollHeight = container.scrollTop() + nodeOffsetHeight - containerH + 30;
                    container.scrollTop(scrollHeight);
                }
            }
        }
    });
    /**   
         * 展示搜索匹配的節點      */
    function showMatchedNode(jqTree, tree, node) {
        //展示所有父節點 
        $(node.target).show();
        $(".tree-title", node.target).addClass("tree-node-targeted");
        var pNode = node;
        while ((pNode = tree.getParent(jqTree, pNode.target))) {
            $(pNode.target).show();
        }
        //展開到該節點 
        tree.expandTo(jqTree, node.target);
        //如果是非葉子節點,需摺疊該節點的所有子節點      
        if (!tree.isLeaf(jqTree, node.target)) {
            tree.collapse(jqTree, node.target);
        }
    }
    /**   
     * 判斷searchText是否與targetText匹配 
     * @param searchText 檢索的文本      * @param targetText 目標文本 
     * @return true-檢索的文本與目標文本匹配;否則為false.        
    */
    function isMatch(searchText, targetText) {
        return $.trim(targetText) != "" && targetText.indexOf(searchText) != -1;
    }
    /**   
     * 獲取easyui tree的所有node節點      */
    function getAllNodes(jqTree, tree) {
        var allNodeList = jqTree.data("allNodeList");
        if (!allNodeList) {
            var roots = tree.getRoots(jqTree);
            allNodeList = getChildNodeList(jqTree, tree, roots);
            jqTree.data("allNodeList", allNodeList);
        }
        return allNodeList;
    }
    /**   
     * 定義獲取easyui tree的子節點的遞歸演算法      */
    function getChildNodeList(jqTree, tree, nodes) {
        var childNodeList = [];
        if (nodes && nodes.length > 0) {
            var node = null;
            for (var i = 0; i < nodes.length; i++) {
                node = nodes[i];
                childNodeList.push(node);
                if (!tree.isLeaf(jqTree, node.target)) {
                    var children = tree.getChildren(jqTree, node.target);
                    childNodeList = childNodeList.concat(getChildNodeList(jqTree, tree, children));
                }
            }
        }
        return childNodeList;
    }
})(jQuery);

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 項目下載地址:http://download.csdn.NET/detail/aqsunkai/9805821 定義一個攔截器,判斷用戶是通過記住我登錄時,查詢資料庫後臺自動登錄,同時把用戶放入session中。 配置攔截器也很簡單,Spring 為此提供了基礎類WebMvcConfigurerAd ...
  • 設計模式是面向對象編程的基礎,是用於指導程式設計。在實際項目開發過程中,並不是一味將設計模式進行套用,也不是功能設計時大量引入設計模式。應該根據具體需求和要求應用適合的設計模式。設計模式是一個老話題了,因為最近在設計“網關API”組件(後續介紹),採用“責任鏈設計模式”進行設計,所以先進行回顧記錄。 ...
  • 購物車主要作用在於:1、和傳統賣場類似,方便用戶一次選擇多件商品去結算。2、充當臨時收藏夾的功能。3、對於商家來說,購物車是向用戶推銷的最佳場所之一。 早期 ERP拆分 業務服務化拆分 WCS拆分 購物車功能模塊概況 層級設計 群集設計 雲購物車從應用層 面上設計了三個—— 交互層、業務... ...
  • 1 概念定義 1 概念定義 1.1 定義 確保一個類只有一個實例,而且自行實例化並向整個系統提供這個實例。 1.2 類型 創建類模式 1.3 難點 1)多個虛擬機 當系統中的單例類被拷貝運行在多個虛擬機下的時候,在每一個虛擬機下都可以創建一 個實例對象。在使用了 EJB、JINI、RMI 技術的分佈 ...
  • 項目下載地址:http://download.csdn.net/detail/aqsunkai/9805821 (一)yml配置文件: pom.xml加入依賴: 在application.yml文件中加上: 使用一個java類獲取yml文件的內容: 通過依賴註入就可以獲取該對象: 方法內獲取值: ( ...
  • 第一次寫博客,有點小激動。由於我的興趣方向是web前端,所以就給自己設計了個頁面。 這個頁面的主要特點就是磨砂效果,還有背景固定效果。靜止不動首先想到的就是position: fixed,只要將背景圖填滿全屏,再設置固定定位就可以了。不過要註意不能把#home當做固定背景,否則子元素也會固定,滾動條 ...
  • 前言:這是筆者學習之後自己的理解與整理。如果有錯誤或者疑問的地方,請大家指正,我會持續更新! innerHTML 在讀模式下,返回與調用元素的所有子節點(包括元素、註釋和文本節點)對應的 HTML 標記; 在寫模式下,innerHTML 會根據指定的值創建新的 DOM 樹,然後用這個 DOM 樹完全 ...
  • 最近由於項目的需要,做了一個基於JQuery的表格分頁插件封裝,部分源碼來源百度,經由自己封裝完成。 下麵是具體代碼和說明,僅供參考。第一步可以先將我的HTML,CSS,JS這三部分的代碼創建好後先運行看看,下圖是文件目錄展示。 html CSS js 好了,到了這裡如果你完成了創建並且運行可以看到 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...