`
KeepCrazy
  • 浏览: 60208 次
社区版块
存档分类
最新评论

Ext TreePanelrcheckbox级联选择的实现

阅读更多
[size=medium]

    Ext的treepanel 没有自带checkbox级联选择效果,因为用得着,所以自己动手写了个, 现将代码分享一下, 欢迎批评指正。
由于我在改变节点复选框的选中状态后没有调用其onCheckChange()方法, 所以在获取已选中的节点时不能使用tree.getSelected()方法. 于是自己也相应为自己的级联添加了getSelected()方法.代码是用editplus写的, 没有用IDE, 为节省功夫, 注释不是很规范, 请见谅.



下面是测试代码:


Ext.onReady(function(){
	var root=new Ext.tree.TreeNode({
		text:"root",
		id:"root",
		checked:false
	});
	var tree=new Ext.tree.TreePanel({
		renderTo:Ext.getBody(),
		width:200,
		root:root,
		listeners:{
			"checkchange": function(node){
				cascadeCheck(node);
			}
		},
		buttons:[{
			text:"显示已选",
			handler:function(){
				var selected=getSelected(root);
				//alert(selected.length);
			}
		}]
	});

	for(var first=0;first<3;first++){
		var flNode=new Ext.tree.TreeNode({
			text:"第一级目录_"+first,
			id:"first_level_"+first,
			checked:false
		});
		root.appendChild(flNode);

		for(var second=0;second<3;second++){
			var slNode=new Ext.tree.TreeNode({
				text:"第二级目录_"+first+"_"+second,
				checked:false,
				id:"second_level_"+first+"_"+second
			});
			flNode.appendChild(slNode);

			for(var third =0;third<3;third++){
				var tlNode=new Ext.tree.TreeNode({
					text:"第三级目录_"+first+"_"+second+"_"+third,
					id:"third_level_"+first+"_"+second+"_"+third
				});
			}
		}
	}

	tree.expandAll();
	
});


function cascadeCheck(node){
	//调用函数改变子孙节点的状态
	changeChildrenStatus(node,isChecked(node));

	//调用函数改变祖先节点的状态
	changeParentStatus(node);

	//函数: 改变改变子孙节点的状态
	function changeChildrenStatus(node,checked){
		if(node.hasChildNodes()){
			node.eachChild(function(child){
				changeChildrenStatus(child,checked);
			});
		}
		node.ui.checkbox.checked=checked;
	}

	//函数: 改变祖先节点的状态
	function changeParentStatus(node){
		var parent=node.parentNode;
		if(!parent){
			return ;
		}

		var siblings=getSiblings(node);

		var checked=true;
		for(var i=0;i<siblings.length;i++){
			if(!isChecked(siblings[i])){
				checked=false;
			}
		}
		
		setChecked(parent, checked);
		changeParentStatus(parent);
	}

	//函数:得到节点的兄弟节点
	function getSiblings(node){
		var siblings=[];
		var parent=node.parentNode;
		if(parent){
			parent.eachChild(function(sibling){
				siblings.push(sibling);
			});
		}
		return siblings;
	}
}

//如果节点前的checkbook已被选中, 返回true, 否则返回false
function isChecked(node){
	return node.ui.checkbox.checked;
}

//将节点前的checkbook的选中状态设为checked
function setChecked(node, checked){
	node.ui.checkbox.checked=checked;
}

//得到一个节点下所有被选中的节点, 返回值为一节点数组 
function getSelected(root){
	var selected=[];

	if(isChecked(root)){
		selected.push(root);
	}
	
	root.eachChild(function(child){
		selected=selected.concat(getSelected(child));
	});

	 return selected;
}


为了使用方便, 我还将其封装成一个treeUtil对象, 代码在附件中, 使用时引用这个js文件, 调用函数时在前面加个treeUtil.就行了.
[/size]
  • 大小: 17.2 KB
0
0
分享到:
评论
1 楼 jueyue 2013-05-25  
确实思路挺好的

相关推荐

    layui多选级联选择器

    在layui的实现中,级联选择器允许用户在一个层级结构中进行多选,提高了用户在大量数据中筛选信息的效率。 要创建一个多选级联选择器,你需要在HTML中定义一个元素作为选择器容器,并为其添加layui的class属性,如`...

    ext 级联选择的树形控件

    "EXT级联选择的树形控件"是一个实现树形结构并支持级联选择的EXT组件。在实际应用中,它可以帮助用户通过树节点的选择来联动控制其他相关选项的状态。这个控件可能包含以下关键特性: 1. **树形结构**:每个节点...

    react级联选择器/支持多选/单选

    2. **状态管理和props**:级联选择器组件需要维护内部状态(如当前选中的值,展示的层级等),这通常通过React的`useState`或`useReducer` Hook实现。同时,父组件可以通过props传递数据(如级联数据源、初始值、...

    cascaderjs级联选择器

    为了提高开发效率和用户体验,开发者通常会使用已有的库或组件来实现级联选择器,例如`Element UI`、`Ant Design`等UI框架都提供了级联选择器组件。这些组件通常具有丰富的配置选项和自定义能力,可以轻松地与现有的...

    基于vue20实现的级联选择器

    在"基于vue20实现的级联选择器"项目中,我们将会深入探讨如何使用 Vue.js v2.0 版本来构建一个功能丰富的级联选择器组件。这个组件能够支持单级、二级、三级乃至多级的级联效果,为用户提供了灵活的数据选择体验。 ...

    Ext combo 下拉框级联

    在Ext JS框架中,实现级联下拉框是通过“combobox”组件的级联配置来完成的。 标题中的"Ext combo 下拉框级联"指的是在Ext JS框架中使用Combobox组件创建级联下拉框的功能。Ext JS是一个强大的JavaScript UI库,...

    jQuery实现级联地区选择

    "jQuery实现级联地区选择"这个主题就是关于如何利用jQuery库来创建一个动态联动的省份-城市选择器。这个实例包含了JSP(JavaServer Pages)、JavaScript和CSS三个主要部分,旨在提供一种高效、用户友好的选择体验。 ...

    Ext 树的级联选择扩展插件使用说明

    总结来说,"Ext 树的级联选择扩展插件使用说明"涉及到的是在Ext JS环境中,如何利用自定义的`TreeCheckNodeUI.js`插件实现树形控件的级联选择功能。通过理解并运用上述步骤,开发者可以创建出交互性强、用户体验良好...

    ExtJS4.2 tree 级联选择

    总结一下,"ExtJS4.2 tree 级联选择"是通过ExtJS的TreePanel组件实现的,利用了`selModel`的级联选择功能,配合`check-tree.js`中的逻辑代码,读取`check-nodes.json`作为数据源,构建了一个具有交互式的树形选择器...

    Ext级联菜单实例

    在IT行业中,级联菜单(Cascading Menu)是一种常见的用户界面元素,它允许用户从一个主菜单项中选择一个子菜单项,然后可能还有更深层次的子菜单。这种交互方式在网页应用、桌面软件以及各种图形用户界面中非常常见...

    JSP Ext spring级联分页程序.rar

    JSP Ext spring级联分页程序,JSP分页程序示例,结合漂亮的extjs框架实现。由于空间问题web-inf/lib里的jar文件未引入,本项目是在struts2 hibernate spring构架下的,所以需要引入这些jar包。

    .net TreeView节点级联选择

    本文将深入探讨如何实现TreeView控件中的节点级联选择功能,包括父节点与子节点的选择联动以及多级选择的支持。 一、基础概念 1. TreeView控件:TreeView是ASP.NET提供的一种Web服务器控件,它可以用来展示层次结构...

    uniapp选择器,包含一级,二级级联,三级级联uniapp-picker-master.zip

    在"uniapp选择器,包含一级,二级级联,三级级联uniapp-picker-master.zip"这个压缩包中,包含了实现这种级联选择的示例代码。 uni-app是一个多端统一的开发框架,它可以将同一份代码编译到iOS、Android、H5、小程序等...

    使用于iview 中 Cascader 级联选择的 省、市、县数据

    使用于iview 中 Cascader 级联选择的 省、市、县数据 ,在项目中亲自测试过没有任何问题,使用如果有问题请联系

    jsp实现级联菜单 jsp实现级联菜单

    ### JSP实现级联菜单详解 #### 一、概述 级联菜单是Web应用程序中常见的一种交互设计方式,尤其在需要展示多层级数据结构时,如省份-城市选择器等场景下非常实用。通过级联菜单,用户可以方便地根据上一级的选择来...

    C# treeview 级联选择

    ### C# TreeView 级联选择实现方法 在C#开发中,处理`TreeView`控件时,经常需要实现一种功能:当用户选中或取消选中一个节点时,该节点的所有子节点(直接子节点及所有下级子节点)的选中状态也会随之改变。这种...

    【JavaScript源代码】elementUI实现级联选择器.docx

    ### JavaScript与ElementUI实现级联选择器 #### 一、引言 在现代Web开发中,用户界面的设计和交互逻辑的实现变得越来越重要。其中,级联选择器是一种常见的控件,广泛应用于需要多层级选择的场景,如省市县选择等...

    基于jquery的H5移动端选择器,日期选择器,自定义级联选择器,自定义html选择器

    级联选择器(Cascading Selectors)则是一种允许用户从一系列相关选项中逐级选择的控件。例如,在一个国家/地区选择器之后,可能会有一个相应的城市选择器,城市列表根据之前选择的国家动态加载。级联选择器提高了...

    实现区域级联选择效果(级联菜单)

    在Android开发中,实现区域级联选择效果,通常是指创建一个类似于下拉菜单的效果,其中一项选择会引发下一级别的选项出现,这种交互设计被称为级联菜单或联动菜单。这样的功能常见于地理位置选择,例如省份-城市-...

Global site tag (gtag.js) - Google Analytics