现在有多层节点的tree 要实现 选择一个节点 将其父节点选择且将其所有的子节点选择,
但其一的话我现在是实现了 但是就是放在一起同时实现不了 算法太难了 主要是嵌套
选中父节点:tree.on('checkchange', function(node, flag) {
// 所有父节点选中
if (node.parentNode.id != 'root') {// 判断是不是root节点
if (flag || tree.getChecked(id, node.parentNode) == "") {// 如果该节点的父节点还有子节点被选者则父节点继续选择
node.parentNode.ui.toggleCheck(flag);
node.parentNode.attributes.checked = flag;
node.parentNode.fireEvent('checkchange', node.parentNode, flag);//递归调用
}
}
}); 选中子节点: tree.on('checkchange', function(node, flag) {
// 所有子节点选中
if (node.hasChildNodes()) {
node.eachChild(function(child) {
child.ui.toggleCheck(flag);
child.attributes.checked = flag;
child.fireEvent('checkchange', child, flag);//递归调用
});
} });
但其一的话我现在是实现了 但是就是放在一起同时实现不了 算法太难了 主要是嵌套
选中父节点:tree.on('checkchange', function(node, flag) {
// 所有父节点选中
if (node.parentNode.id != 'root') {// 判断是不是root节点
if (flag || tree.getChecked(id, node.parentNode) == "") {// 如果该节点的父节点还有子节点被选者则父节点继续选择
node.parentNode.ui.toggleCheck(flag);
node.parentNode.attributes.checked = flag;
node.parentNode.fireEvent('checkchange', node.parentNode, flag);//递归调用
}
}
}); 选中子节点: tree.on('checkchange', function(node, flag) {
// 所有子节点选中
if (node.hasChildNodes()) {
node.eachChild(function(child) {
child.ui.toggleCheck(flag);
child.attributes.checked = flag;
child.fireEvent('checkchange', child, flag);//递归调用
});
} });
解决方案 »
- 求一段可以隐藏网页左下角状态栏信息的代码
- 为什么当鼠标快速晃动后,jquery的fadeIn()和fadeOut()没有效果了呢?
- JS页面定时画笔
- 如何使页面广告过几秒后弹出,并且只弹出一次
- 对象的困惑?
- 菜鸟求助 如何把父页面中的hidden数据传送到新打开的子页面中去
- on的用法问题
- 我有这样一个button按钮,怎样当button中的文字长度大于button按钮的宽度的时候自动换行?
- <a href="" open="">中的open????真可悲。。。。什么作用???waiting..谢了
- js 如何获取gif文件的时长?
- 如何让光标在按回车后自动跳到下一个输入框?
- extjs chart显示问题
node.expand();
node.attributes.checked = checked;
node.eachChild(function(child) {
child.ui.toggleCheck(checked);
child.attributes.checked = checked;
child.fireEvent('checkchange', child, checked);
});
}, tree);
// 所有父节点选中
// Ext.log(node+"======"+node.parentNode);
// j=node;
if (node.parentNode.id != 'root') {// 判断是不是root节点
if (flag || tree.getChecked(id, node.parentNode) == "") {// 如果该节点的父节点还有子节点被选者则父节点继续选择
node.parentNode.ui.toggleCheck(flag);
node.parentNode.attributes.checked = flag;
node.parentNode.fireEvent('checkchange', node.parentNode, flag);//递归调用
}
}
});
//使该节点路径上的父节点与该节点一致
personTree.on('checkchange', function(node, checked) {
node.attributes.checked = checked;
//使到该节点的路径上的节点均为选中状态
if(checked){
//判断不是root节点
if (node.parentNode.id != 'perRoot') {
//若父节点没有选中,则继续向上选中父节点
if(!node.parentNode.checked){
node.parentNode.ui.toggleCheck(checked);
node.parentNode.attributes.checked = checked;
//递归调用
node.parentNode.fireEvent('checkchange', node.parentNode, checked);
}
}else{
node.parentNode.ui.toggleCheck(checked);
node.parentNode.attributes.checked = checked;
}
}else{
if (node.parentNode.id != 'perRoot') {
//如果父节点没有被选中的子节点,则设为非选中状态
if(!node.parentNode.findChild('checked',true)){
node.parentNode.ui.toggleCheck(checked);
node.parentNode.attributes.checked = checked;
//递归调用
node.parentNode.fireEvent('checkchange', node.parentNode,checked);
}
}else{
if(!node.parentNode.findChild('checked',true)){
node.parentNode.ui.toggleCheck(checked);
node.parentNode.attributes.checked = checked; }
}
}
});
function getAllChildrenNodes(node){
var children = [];
if(!node.isLeaf()){//是目录
//node.expand();
for(var i=0;i<node.childNodes.length;i++){
children.push(node.childNodes[i]);
children = children.concat(getAllChildrenNodes(node.childNodes[i]));
}
}
return children;
}/**子节点选中,其祖上节点亦选中*/
function checkAncestor(node, checked) {
//获取所有子节点
node.cascade(function(node){
node.expand();
node.attributes.checked = checked;
node.ui.checkbox.checked = checked;
return true;
});
//获取所有父节点
var pNode = node.parentNode;
while(pNode.id !="0"){//子节点选中,父节点也被选中
if (checked || node.getOwnerTree().getChecked(id,pNode)== "") {
pNode.ui.checkbox.checked = checked;
pNode.attributes.checked = checked;
}else{
var childNodes = getAllChildrenNodes(pNode);//获取被选中节点的所有子节点,若子节点还有被选中的,被选中的节点(即父节点)不勾掉
for (var i = 0; i < childNodes.length; i++) {
if (node.getOwnerTree().getChecked(id,childNodes[i])!= "") {
pNode.ui.checkbox.checked = checked;
pNode.attributes.checked = checked;
}
}
}
pNode = pNode.parentNode;
}
/*for(; pNode.id !="perRoot"; pNode = pNode.parentNode ){
}*/
}
//这个方法是选择父节点,自动选中所有的子节点
function a(node,checked){
checked?node.expand():node.collapse();
if(node.hasChildNodes()){
node.eachChild(function(child) {
child.attributes.checked = checked;
var cb = child.ui.checkbox;
if(cb) cb.checked = checked;
a(child,checked);
});
}
}
//这个方法是选择子节点,自动选中父节点的父节点
function b(node,checked){
if(checked){
node.expand();
var parentNode = node.parentNode;
if(parentNode!=undefined){
parentNode.attributes.checked = checked;
var cb = parentNode.ui.checkbox;
if(cb) cb.checked = checked;
b(parentNode,checked);
}
}
}
//这两个方法要在treepanel的checkchange里调用.
checkTree.on('checkchange', function(node, checked) {
selParent(node, checked);
selChild(node, checked); });
// 全选父节点
function selParent(node, checked) {
if (checked) {
if (node.parentNode.id!="service_root_check_node") {// 判断是不是root节点
node.parentNode.ui.checkbox.checked = checked;
node.parentNode.attributes.checked = checked;
selParent(node.parentNode, checked);
}
}
}
// 全选或者反选子节点
function selChild(node, checked) {
node.eachChild(function(child) {
child.ui.checkbox.checked = checked;
child.attributes.checked = checked;
selChild(child, checked);
}); }