jqueryeasyuitree的搜索树节点⽅法  1/**
2 * 1)扩展jquery easyui tree的节点检索⽅法。使⽤⽅法如下:
3 * $("#treeId").tree("search", searchText);
4 * 其中,treeId为easyui tree的根UL元素的ID,searchText为检索的⽂本。
5 * 如果searchText为空或"",将恢复展⽰所有节点为正常状态
6*/
7 (function($) {
8
9    $.extend($.hods, {
10/**
11        * 扩展easyui tree的搜索⽅法
12        * @param tree easyui tree的根DOM节点(UL节点)的jQuery对象
13        * @param searchText 检索的⽂本
14        * @param this-context easyui tree的tree对象
15*/
16        search: function(jqTree, searchText) {
17//easyui tree的tree对象。可以通过hodName(jqTree)⽅式调⽤easyui tree的⽅法
18var tree = this;
19
20//获取所有的树节点
21var nodeList = getAllNodes(jqTree, tree);
22
23//如果没有搜索条件,则展⽰所有树节点
24            searchText = $.trim(searchText);
25if (searchText == "") {
26for (var i=0; i<nodeList.length; i++) {
27                    $(".tree-node-targeted", nodeList[i].target).removeClass("tree-node-targeted");
28                    $(nodeList[i].target).show();
29                }
30//展开已选择的节点(如果之前选择了)
31var selectedNode = Selected(jqTree);
32if (selectedNode) {
33                    pandTo(jqTree, selectedNode.target);
34                }
35return;
36            }
37
38//搜索匹配的节点并⾼亮显⽰
39var matchedNodeList = [];
40if (nodeList && nodeList.length>0) {
41var node = null;
42for (var i=0; i<nodeList.length; i++) {
43                    node = nodeList[i];
44if (isMatch(searchText, )) {
45                        matchedNodeList.push(node);
46                    }
47                }
48
49//隐藏所有节点
50for (var i=0; i<nodeList.length; i++) {
51                    $(".tree-node-targeted", nodeList[i].target).removeClass("tree-node-targeted");
52                    $(nodeList[i].target).hide();
53                }
54
55//折叠所有节点
56                llapseAll(jqTree);
57
58//展⽰所有匹配的节点以及⽗节点
59for (var i=0; i<matchedNodeList.length; i++) {
60                    showMatchedNode(jqTree, tree, matchedNodeList[i]);
61                }
62            }
63        },
64
65/**
66        * 展⽰节点的⼦节点(⼦节点有可能在搜索的过程中被隐藏了)
67        * @param node easyui tree节点
68*/
69        showChildren: function(jqTree, node) {
70//easyui tree的tree对象。可以通过hodName(jqTree)⽅式调⽤easyui tree的⽅法
71var tree = this;
72
73//展⽰⼦节点
74if (!tree.isLeaf(jqTree, node.target)) {
75var children = Children(jqTree, node.target);
76if (children && children.length>0) {
77for (var i=0; i<children.length; i++) {
78if ($(children[i].target).is(":hidden")) {
79                            $(children[i].target).show();
80                        }
81                    }
82                }
83            }
84        },
85
86/**
87        * 将滚动条滚动到指定的节点位置,使该节点可见(如果有滚动条才滚动,没有滚动条就不滚动)
88        * @param param {
89        *    treeContainer: easyui tree的容器(即存在滚动条的树容器)。如果为null,则取easyui tree的根UL节点的⽗节点。
90        *    targetNode:  将要滚动到的easyui tree节点。如果targetNode为空,则默认滚动到当前已选中的节点,如果没有选中的节点,则不滚动
91        * }
92*/
93        scrollTo: function(jqTree, param) {
94//easyui tree的tree对象。可以通过hodName(jqTree)⽅式调⽤easyui tree的⽅法
95var tree = this;
96
97//如果node为空,则获取当前选中的node
98var targetNode = param && param.targetNode ? param.targetNode : Selected(jqTree);
99
100if (targetNode != null) {
101//判断节点是否在可视区域
102var root = Root(jqTree);
103var $targetNode = $(targetNode.target);
104var container = param && Container ? Container : jqTree.parent();
105var containerH = container.height();
106var nodeOffsetHeight = $targetNode.offset().top - container.offset().top;
107if (nodeOffsetHeight > (containerH - 30)) {
108var scrollHeight = container.scrollTop() + nodeOffsetHeight - containerH + 30;
109                    container.scrollTop(scrollHeight);
110                }
111            }
112        }
113    });
114
115
116
117
118/**
119    * 展⽰搜索匹配的节点
120*/
121    function showMatchedNode(jqTree, tree, node) {
122//展⽰所有⽗节点
123        $(node.target).show();
124        $(".tree-title", node.target).addClass("tree-node-targeted");
125var pNode = node;
126while ((pNode = Parent(jqTree, pNode.target))) {
127            $(pNode.target).show();
128        }
129//展开到该节点
130        pandTo(jqTree, node.target);
131//如果是⾮叶⼦节点,需折叠该节点的所有⼦节点
132if (!tree.isLeaf(jqTree, node.target)) {
133            llapse(jqTree, node.target);
134        }
135    }
136
137/**
138    * 判断searchText是否与targetText匹配
139    * @param searchText 检索的⽂本
140    * @param targetText ⽬标⽂本
141    * @return true-检索的⽂本与⽬标⽂本匹配;否则为false.
142*/
143    function isMatch(searchText, targetText) {
144return $.trim(targetText)!="" && targetText.indexOf(searchText)!=-1;
145    }
jquery滚动条滚动到底部
146
147/**
148    * 获取easyui tree的所有node节点
149*/
150    function getAllNodes(jqTree, tree) {
151var allNodeList = jqTree.data("allNodeList");
152if (!allNodeList) {
153var roots = Roots(jqTree);
154            allNodeList = getChildNodeList(jqTree, tree, roots);
155            jqTree.data("allNodeList", allNodeList);
156        }
157return allNodeList;
158    }
159
160/**
161    * 定义获取easyui tree的⼦节点的递归算法
162*/
163    function getChildNodeList(jqTree, tree, nodes) {
164var childNodeList = [];
165if (nodes && nodes.length>0) {
166var node = null;
167for (var i=0; i<nodes.length; i++) {
168                node = nodes[i];
169                childNodeList.push(node);
170if (!tree.isLeaf(jqTree, node.target)) {
171var children = Children(jqTree, node.target);
172                    childNodeList = at(getChildNodeList(jqTree, tree, children));  173                }
174            }
175        }
176return childNodeList;
177    }
178 })(jQuery);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。