对 combotree 的改进, 包括展开到当前节点, 键盘操作树, 检索过滤
2015-03-03 17:36
260 查看
转载 http://www.jeasyui.com/forum/index.php?PHPSESSID=vr7i9f3dv7eg3868rb4gvbqg90&topic=3217.0
function onCombotreeShowPanel(){
// 显示下拉框, 展开到当前节点
var t = $(this).combotree('tree');
var node = t.tree('getSelected');
if (node){
t.tree('expandTo', node.target);
}
}
(function($){
// 实现下拉树的本地检索功能
$.fn.combotree.defaults.editable = true;
$.extend($.fn.combotree.methods,{
nav:function(jq, dir){
return jq.each(function(){
var opts = $(this).combotree('options');
var t = $(this).combotree('tree');
var nodes = t.tree('getChildren');
if (!nodes.length) {return;}
var node = t.tree('getSelected');
if (!node){
t.tree('select', dir>0 ? nodes[0].target : nodes[nodes.length-1].target);
} else {
var index = 0;
for(var i=0; i<nodes.length; i++){
if (nodes.target == node.target){
index = i;
break;
}
}
if (dir>0){
while (index < nodes.length-1){
index++;
if ($(nodes[index].target).is(':visible')){break;}
}
} else {
while (index > 0){
index--;
if ($(nodes[index].target).is(':visible')){break;}
}
}
t.tree('select',nodes[index].target);
t.tree('scrollTo',nodes[index].target);
}
if (opts.selectOnNavigation){
var node = t.tree('getSelected');
$(this).combotree("setValue", node.id);
// $(node.target).trigger('click');
// $(this).combotree('showPanel');
}
});
}
});
// 检测当前能否编辑
function checkEditable(el){
var opt = el.combo("options");
if (opt.readonly || opt.disabled) {
return false;
}
return opt.editable;
}
$.extend($.fn.combotree.defaults.keyHandler,{
up:function(){
var el = $(this);
if (!checkEditable(el)) return;
// 当前 panel 已展开, 则处理nav, 否则先显示 panel
var p = el.combotree('panel');
if (p.is(':visible')){
el.combotree('nav', -1);
}else{
el.combotree('showPanel');
}
},
down:function(){
var el = $(this);
if (!checkEditable(el)) return;
// 当前 panel 已展开, 则处理nav, 否则先显示 panel
var p = el.combotree('panel');
if (p.is(':visible')){
el.combotree('nav', 1);
}else{
el.combotree('showPanel');
}
},
right:function(){
var el = $(this);
if (!checkEditable(el)) return;
var p = el.combotree('panel');
if (!p.is(':visible')){return;}
// 展开当前节点的分支
var t = el.combotree('tree');
var node = t.tree('getSelected');
if (node){
t.tree('expand', node.target);
}
},
left:function(){
var el = $(this);
if (!checkEditable(el)) return;
var p = el.combotree('panel');
if (!p.is(':visible')){return;}
var t = el.combotree('tree');
var node = t.tree('getSelected');
if (node){
var isLeaf = t.tree('isLeaf', node.target);
if (!isLeaf && node.state == "open"){
// 如果不是叶子节点, 并且当前是展开状态, 则收缩当前分支
t.tree('collapse', node.target);
}else{
// 如果有父节点, 则收缩父节点, 并且选中父节点
var parent = t.tree('getParent', node.target);
if (parent){
t.tree('collapse', parent.target);
t.tree('select', parent.target);
// 需要时, 更新textbox的值
var opts = el.combo("options");
if (opts.selectOnNavigation){
el.combotree("setValue", parent.id);
}
}
}
}
},
enter:function(){
var el = $(this);
if (!checkEditable(el)) return;
var p = el.combotree('panel');
if (!p.is(':visible')){return;}
var t = el.combotree('tree');
var node = t.tree('getSelected');
if (node){
$(node.target).trigger('click');
}
$(this).combotree('hidePanel');
}
});
$.extend($.fn.combotree.defaults.keyHandler,{
query:function(q){
if (q == "") {
// 用于触发 onchange
$(this).combotree('setValue', "");
return;
}
var opts = $(this).combotree('options');
var t = $(this).combotree('tree');
var nodes = t.tree('getChildren');
for(var i=0; i<nodes.length; i++){
var node = nodes;
// if (node.text.indexOf(q) >= 0){
if (opts.filter &
4000
amp;& opts.filter(q, node)){
if (q != ""){
// 必须展开, 否则显示不出来
t.tree('expandTo', node.target);
}
$(node.target).show();
} else {
$(node.target).hide();
}
}
// 点击下拉, 则恢复显示
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.target).show();
}
onShowPanel.call(this);
};
$(this).combo('options').onShowPanel = opts.onShowPanel;
}
}
});
})(jQuery);
function onCombotreeShowPanel(){
// 显示下拉框, 展开到当前节点
var t = $(this).combotree('tree');
var node = t.tree('getSelected');
if (node){
t.tree('expandTo', node.target);
}
}
(function($){
// 实现下拉树的本地检索功能
$.fn.combotree.defaults.editable = true;
$.extend($.fn.combotree.methods,{
nav:function(jq, dir){
return jq.each(function(){
var opts = $(this).combotree('options');
var t = $(this).combotree('tree');
var nodes = t.tree('getChildren');
if (!nodes.length) {return;}
var node = t.tree('getSelected');
if (!node){
t.tree('select', dir>0 ? nodes[0].target : nodes[nodes.length-1].target);
} else {
var index = 0;
for(var i=0; i<nodes.length; i++){
if (nodes.target == node.target){
index = i;
break;
}
}
if (dir>0){
while (index < nodes.length-1){
index++;
if ($(nodes[index].target).is(':visible')){break;}
}
} else {
while (index > 0){
index--;
if ($(nodes[index].target).is(':visible')){break;}
}
}
t.tree('select',nodes[index].target);
t.tree('scrollTo',nodes[index].target);
}
if (opts.selectOnNavigation){
var node = t.tree('getSelected');
$(this).combotree("setValue", node.id);
// $(node.target).trigger('click');
// $(this).combotree('showPanel');
}
});
}
});
// 检测当前能否编辑
function checkEditable(el){
var opt = el.combo("options");
if (opt.readonly || opt.disabled) {
return false;
}
return opt.editable;
}
$.extend($.fn.combotree.defaults.keyHandler,{
up:function(){
var el = $(this);
if (!checkEditable(el)) return;
// 当前 panel 已展开, 则处理nav, 否则先显示 panel
var p = el.combotree('panel');
if (p.is(':visible')){
el.combotree('nav', -1);
}else{
el.combotree('showPanel');
}
},
down:function(){
var el = $(this);
if (!checkEditable(el)) return;
// 当前 panel 已展开, 则处理nav, 否则先显示 panel
var p = el.combotree('panel');
if (p.is(':visible')){
el.combotree('nav', 1);
}else{
el.combotree('showPanel');
}
},
right:function(){
var el = $(this);
if (!checkEditable(el)) return;
var p = el.combotree('panel');
if (!p.is(':visible')){return;}
// 展开当前节点的分支
var t = el.combotree('tree');
var node = t.tree('getSelected');
if (node){
t.tree('expand', node.target);
}
},
left:function(){
var el = $(this);
if (!checkEditable(el)) return;
var p = el.combotree('panel');
if (!p.is(':visible')){return;}
var t = el.combotree('tree');
var node = t.tree('getSelected');
if (node){
var isLeaf = t.tree('isLeaf', node.target);
if (!isLeaf && node.state == "open"){
// 如果不是叶子节点, 并且当前是展开状态, 则收缩当前分支
t.tree('collapse', node.target);
}else{
// 如果有父节点, 则收缩父节点, 并且选中父节点
var parent = t.tree('getParent', node.target);
if (parent){
t.tree('collapse', parent.target);
t.tree('select', parent.target);
// 需要时, 更新textbox的值
var opts = el.combo("options");
if (opts.selectOnNavigation){
el.combotree("setValue", parent.id);
}
}
}
}
},
enter:function(){
var el = $(this);
if (!checkEditable(el)) return;
var p = el.combotree('panel');
if (!p.is(':visible')){return;}
var t = el.combotree('tree');
var node = t.tree('getSelected');
if (node){
$(node.target).trigger('click');
}
$(this).combotree('hidePanel');
}
});
$.extend($.fn.combotree.defaults.keyHandler,{
query:function(q){
if (q == "") {
// 用于触发 onchange
$(this).combotree('setValue', "");
return;
}
var opts = $(this).combotree('options');
var t = $(this).combotree('tree');
var nodes = t.tree('getChildren');
for(var i=0; i<nodes.length; i++){
var node = nodes;
// if (node.text.indexOf(q) >= 0){
if (opts.filter &
4000
amp;& opts.filter(q, node)){
if (q != ""){
// 必须展开, 否则显示不出来
t.tree('expandTo', node.target);
}
$(node.target).show();
} else {
$(node.target).hide();
}
}
// 点击下拉, 则恢复显示
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.target).show();
}
onShowPanel.call(this);
};
$(this).combo('options').onShowPanel = opts.onShowPanel;
}
}
});
})(jQuery);
相关文章推荐
- PostgreSQL 多重含义数组检索与条件过滤 (标签1:属性, 标签n:属性) - 包括UPSERT操作如何修改数组、追加数组元素
- combotree 展开到当前节点
- 这是一个关于XML文档的操作管理器XMLHelper类,类中包括XML文档的创建,文档节点和属性的读取,添加,修改,删除的方法功能的实现
- java语言实现的二叉树的各种操作(包括递归与非递归遍历二叉树,求二叉树的高度,节点总数,叶子节点等)
- 对当前目录下(包括子目录)特定类型文件执行某种操作
- xml操作(三)添加xml节点的子节点(针对上节的改进)
- Unity3D获取当前键盘按键及Unity3D鼠标、键盘的基本操作
- 菜鸟用onload实现“只展开当前节点下级目录”的asp树形菜单
- HBase基础操作,包括表的增删改查过滤等
- webBrowser操作网页找不到节点元素使用输入键盘SendKeys.send
- 关于分类树节点编辑成功后刷新树并展开操作节点
- 如何取得当前展开节点的HTREEITEM,和如何知道调用时是展开还是折回.
- TreeView保存当前节点展开状态【Draft Saved】
- TreeView 动态绑定数据及在当前节点操作
- DevExpress TreeList 展开当前节点及父节点
- Flex中如何利用openItems属性,检测当前Tree的哪一个节点被展开
- hdu 3974 Assign the task 树上操作,更改每棵子树的值,查询各节点当前值 线段树+时间戳
- easyUI tree的展开和收缩操作以及节点赋值操作
- Python练习:优酷评论过滤(抓取当前视频全部评论,并过滤不包括所需关键词的留言)
- ztree操作当前节点的同级兄弟节点可选