利用easyUI实现tree叶子节点横向展示以及checkbox联级勾选改造

1、tree的叶子节点横向展示

2、(a) 勾选根节点时,子节点全部联级选中,取消时同理;

     (b) 勾选非根节点时,该节点的所有父节点以及子节点全部选中

     (c) 取消非根节点时,该节点的所有子节点取消,父节点不取消


下面直接上代码吧,注释说明都在代码中

<body>
	<h2>CheckBox Tree</h2>
	<p>Tree nodes with check boxes.</p>
	<div style="margin:20px 0;">
		<a href="#" class="easyui-linkbutton" οnclick="getChecked()">GetChecked</a> 
	</div>
	<div class="easyui-panel" style="padding:5px">
		<ul id="tt" class="easyui-tree" data-options="url:'tree_data1.json',method:'get',animate:true,checkbox:true"></ul>
	</div>
	<script type="text/javascript">
	    function getChecked(){
		    var nodes = $('#tt').tree('getChecked');
		    var s = '';
		    for(var i=0; i<nodes.length; i++){
			    if (s != '' && nodes[i].text != '') s += ',';
			    s += nodes[i].text;
		    }
		    alert(s);
	    }

            var on_off;//初始化开关
	    var child_checked_flag = false; //子节点勾选开关
	    var father_checked_flag = true; //父节点勾选开关
	    var get_child_flag = true; //获取子节点开关
	    var initial_children = []; //子节点集   只获取第一次onCheck事件中的子节点
	    $('#tt').tree({
                cascadeCheck: false,
                onBeforeLoad: function(node, param){
                on_off = false;  //初始化时,不触发onCheck事件
                },
                onLoadSuccess:function(nodes,data){
                    //叶子节点横向展示
                    $('#tt').find("ul >li:not(:has(ul))").css('float', 'left'); // 选择最后一个节点 并添加 float:left
                    $('#tt').find("li:has(ul)").css('clear', 'both');        // 给非最后节点添加 clear:both
                    //对text值为空的节点进行隐藏,对于二级菜单就是叶子节点的,如果需要竖列展示,
		    // 就需要给该叶子节点添加一个空的子节点,即子节点的id和text都为空
		    $('.tree-title:empty').parent().css('display','none');
                    on_off = true;//加载完成,正常开启onCheck事件 ,
                },
                onCheck:function(node,checked){
                    if(on_off){
                        var parentNode = $('#tt').tree('getParent', node.target);
                        if(get_child_flag){
                        //只获取第一次onCheck事件中的子节点, 后续节点触发onCheck事件时关闭,不让进入
                        initial_children = $('#tt').tree('getChildren', node.target);
                        }
                        if(checked){
                            if(father_checked_flag){
                                if(parentNode != null){//如果不是根节点
				    get_child_flag = false;
				    if(parentNode.checked){
					child_checked_flag = true;
				    }else{
				        //js控制  会触发onCheck事件  但是当父节点为选择状态时不会触发
                                        $('#tt').tree('check', parentNode.target);//父节点勾选
                                    }
                                 } else {
                                child_checked_flag = true;
			        }
                            }
                            if (child_checked_flag) {
                                father_checked_flag = false;
                                get_child_flag = false;
                                for (var i = 0; i < initial_children.length; i++) {
                                    //通过js控制  会触发onCheck事件
                                    $('#tt').tree('check', initial_children[i].target);//子节点勾选,
                                }
                            }
                        }else{
                            get_child_flag = false;
                            for (var i = 0; i < initial_children.length; i++) {
                                $('#tt').tree('uncheck', initial_children[i].target);//子节点取消勾选
                            }
                        }
                    }
                    //每次点击完后, 初始化全局变量
                    child_checked_flag = false;
                    father_checked_flag = true;
                    get_child_flag = true;
                    initial_children = [];
	        }
            })
	</script>
</body>

效果图如下, 弹框中为选中的值, 如果是原装的easyui-tree效果则是(子节点未全部选中,父节点不会被选中)




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值