1.修改选中父级时不自动选中子级,选中子级时直接选中父级并存储父级id
.on(this.settings.checkbox.tie_selection ? 'select_node.jstree' : 'check_node.jstree', $.proxy(function (e, data) { var obj = data.node, m = this._model.data, par = this.get_node(obj.parent), dom = this.get_node(obj, true), i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection; // apply down // if(s.indexOf('down') !== -1) { // this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d)); // for(i = 0, j = obj.children_d.length; i < j; i++) { // tmp = m[obj.children_d[i]]; // tmp.state[ t ? 'selected' : 'checked' ] = true; // if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { // tmp.original.state.undetermined = false; // } // } // } // apply up if(s.indexOf('up') !== -1) { while(par && par.id !== '#') { // c = 0; // for(i = 0, j = par.children.length; i < j; i++) { // c += m[par.children[i]].state[ t ? 'selected' : 'checked' ]; // } // if(c === j) { par.state[ t ? 'selected' : 'checked' ] = true; if($.inArray(par.id, this._data[ t ? 'core' : 'checkbox' ].selected)==-1){ this._data[ t ? 'core' : 'checkbox' ].selected.push(par.id); } tmp = this.get_node(par, true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); } // } // else { // break; // } par = this.get_node(par.parent); } } // apply down (process .children separately?) if(s.indexOf('down') !== -1 && dom.length) { $(dom.find('.jstree-anchor')[0]).addClass(t ? 'jstree-clicked' : 'jstree-checked'); } }, this))
2.取消选中子级时不取消父级选中状态,不移除选中的父级id
.on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', $.proxy(function (e, data) { var obj = data.node, dom = this.get_node(obj, true), i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection; if(obj && obj.original && obj.original.state && obj.original.state.undetermined) { obj.original.state.undetermined = false; } // apply down if(s.indexOf('down') !== -1) { for(i = 0, j = obj.children_d.length; i < j; i++) { tmp = this._model.data[obj.children_d[i]]; tmp.state[ t ? 'selected' : 'checked' ] = false; if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { tmp.original.state.undetermined = false; } } } // apply up if(s.indexOf('up') !== -1) { // for(i = 0, j = obj.parents.length; i < j; i++) { // tmp = this._model.data[obj.parents[i]]; // tmp.state[ t ? 'selected' : 'checked' ] = false; // if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { // tmp.original.state.undetermined = false; // } // tmp = this.get_node(obj.parents[i], true); // if(tmp && tmp.length) { // tmp.children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); // } // } } tmp = []; for(i = 0, j = this._data[ t ? 'core' : 'checkbox' ].selected.length; i < j; i++) { // apply down + apply up if( (s.indexOf('down') === -1 || $.inArray(this._data[ t ? 'core' : 'checkbox' ].selected[i], obj.children_d) === -1) // &&(s.indexOf('up') === -1 || $.inArray(this._data[ t ? 'core' : 'checkbox' ].selected[i], obj.parents) === -1) ) { tmp.push(this._data[ t ? 'core' : 'checkbox' ].selected[i]); } } this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(tmp); // apply down (process .children separately?) if(s.indexOf('down') !== -1 && dom.length) { dom.find('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); } }, this));
3.jstree初始化时修改父级选中不默认选中子级
.on('model.jstree', $.proxy(function (e, data) { var m = this._model.data, p = m[data.parent], dpc = data.nodes, chd = [], c, i, j, k, l, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection; // if(s.indexOf('down') !== -1) { // // apply down // if(p.state[ t ? 'selected' : 'checked' ]) { // for(i = 0, j = dpc.length; i < j; i++) { // m[dpc[i]].state[ t ? 'selected' : 'checked' ] = true; // } // this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(dpc); // } // else { // for(i = 0, j = dpc.length; i < j; i++) { // if(m[dpc[i]].state[ t ? 'selected' : 'checked' ]) { // for(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) { // m[m[dpc[i]].children_d[k]].state[ t ? 'selected' : 'checked' ] = true; // } // this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(m[dpc[i]].children_d); // } // } // } // } if(s.indexOf('up') !== -1) { // apply up for(i = 0, j = p.children_d.length; i < j; i++) { if(!m[p.children_d[i]].children.length) { chd.push(m[p.children_d[i]].parent); } } chd = $.vakata.array_unique(chd); for(k = 0, l = chd.length; k < l; k++) { p = m[chd[k]]; while(p && p.id !== '#') { c = 0; for(i = 0, j = p.children.length; i < j; i++) { c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; } if(c === j) { p.state[ t ? 'selected' : 'checked' ] = true; if($.inArray(p.id, this._data[ t ? 'core' : 'checkbox' ].selected)==-1) { this._data[t ? 'core' : 'checkbox'].selected.push(p.id); } tmp = this.get_node(p, true); if(tmp && tmp.length) { // tmp.children('.jstree-anchor').addClass( t ? 'jstree-clicked' : 'jstree-checked'); } } else { break; } p = this.get_node(p.parent); } } } this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected); }, this))
后来翻到的,具体没有操作过,请大家对照修改测试。
来源:http://blog.csdn.net/gahd3000/article/details/52095406
- 相关文章
- 查看评论:(0)
【已经有0位大神发现了看法】
- [原创]刷新页面时,保存layuiAdmin标签的方法 2020-07-18
- [原创]jsTree中添加checkbox,获取选中节点和半选中节点,jQuery插件jsTree 2017-03-18
- [原创]jsTree中的Ajax调用JSON数据方法,jQuery插件jsTree 2017-03-13
- [分享]VPS主机,VPS服务器推荐 2012-11-16
- UnixBench-Linux VPS性能测试工具 2012-04-13
发表评论: