zoukankan      html  css  js  c++  java
  • ztree : checkbox 选中/不选中时动态添加/删除DOM元素

    先上代码。

            var IDMark_Switch = "_switch",
            IDMark_Icon = "_ico",
            IDMark_Span = "_span",
            IDMark_Input = "_input",
            IDMark_Check = "_check",
            IDMark_Edit = "_edit",
            IDMark_Remove = "_remove",
            IDMark_Ul = "_ul",
            IDMark_A = "_a";
            
            var setting = {
                check: {
                    enable: true,
                    chkboxType: { "Y": "", "N": "" }
                },
                callback: {
                    onCheck: onCheck
                }
            };
    
            var zNodes =[
                {id:1, name:"hover事件显示控件", open:true,
                    children:[
                           {id:11, name:"按钮1"},
                           {id:12, name:"按钮2"},
                           {id:13, name:"下拉框"},
                           {id:141, name:"文本1"},
                           {id:142, name:"文本2"},
                           {id:15, name:"超链接"}
    
                    ]},
                {id:2, name:"始终显示控件", open:true,
                    children:[
                           {id:21, name:"按钮1"},
                           {id:22, name:"按钮2"},
                           {id:23, name:"下拉框"},
                           {id:24, name:"文本"},
                           {id:25, name:"超链接"}
                    ]}
             ];
    
            
    
            function onCheck(e, treeId, treeNode) {
                var flagBoolean
                // 从没有点击 到 点击 flagBoolean 1
                // 从点击 到 没有点击 flagBoolean 2
                // 都不是 flagBoolean 0
    
                // console.log(e)
                // console.log(treeId)
                // console.log(treeNode)
    
                // ?
                var zTree = $.fn.zTree.getZTreeObj("treeDemo");
                // var node = zTree.getNodeByParam("id",fileSucessdData[0].rid);
                // zTree.selectNode(node);
    
                var nodes = zTree.getChangeCheckedNodes();
    
                // console.log(nodes[0])
    
                for (var n in nodes) {
                    if (nodes[n].checked && !nodes[n].checkedOld) {
                        flagBoolean = 1
                    } else if (!nodes[n].checked && nodes[n].checkedOld) {
                        flagBoolean = 2
                    } else {
                        flagBoolean = 0
                    }
                    nodes[n].checkedOld = nodes[n].checked
                }
    
                // console.log(nodes)
    
                var node = nodes[0]
    
                
    
                var aObj = $("#" + node.tId + IDMark_A);
    
                console.log(aObj)
    
                if (flagBoolean === 1) {
                    if ($("#diyBtn_"+treeNode.id).length>0) return;
                    var editStr = "<input id='diyBtn_" +treeNode.id+ "' title='"+treeNode.name+"'  />";
                    aObj.after(editStr);
                    var btn = $("#diyBtn_"+treeNode.id);
                } else if (flagBoolean === 2) {
                    if (treeNode.parentTId && treeNode.getParentNode().id!=1) return;
                    $("#diyBtn_"+treeNode.id).unbind().remove();
                    $("#diyBtn_space_" +treeNode.id).unbind().remove();
                }
                
    
                // aObj.click();
    
                // $("#"+node.tId+"_span").click();
                // end
            }
            
            $(document).ready(function(){
                $.fn.zTree.init($("#treeDemo"), setting, zNodes);
            });

    讲一下这个是怎么实现的。

    首先是 zTree.getChangeCheckedNodes() 方法的坑。

    API说:

    获取输入框勾选状态被改变的节点集合(与原始数据 checkedOld 对比)。[setting.check.enable = true 时有效]

    请通过 zTree 对象执行此方法。

    但是API还说:

    如果需要获取每次操作后全部被改变勾选状态的节点数据,请在每次勾选操作后,遍历所有被改变勾选状态的节点数据,让其 checkedOld = checked 就可以了。

    所以,需要在方法中手动设置一下checkedOld。

                for (var n in nodes) {
                    nodes[n].checkedOld = nodes[n].checked
                }

    这样,触发方法时,才会是 只有改变check状态的节点对象进入 nodes 集合

    然后,我们需要记录一下状态:它是从没选中到选中了,还是从选中了到没选中

                var flagBoolean
                // 从没有点击 到 点击 flagBoolean 1
                // 从点击 到 没有点击 flagBoolean 2
                // 都不是 flagBoolean 0
    
                var zTree = $.fn.zTree.getZTreeObj("treeDemo");
    
                var nodes = zTree.getChangeCheckedNodes();
    
                for (var n in nodes) {
                    if (nodes[n].checked && !nodes[n].checkedOld) {
                        flagBoolean = 1
                    } else if (!nodes[n].checked && nodes[n].checkedOld) {
                        flagBoolean = 2
                    } else {
                        flagBoolean = 0
                    }
                    nodes[n].checkedOld = nodes[n].checked
                }

    最后,把别的DEMO里添加和销毁自定义DOM的 代码粘过来就行了。

                if (flagBoolean === 1) {
                    if ($("#diyBtn_"+treeNode.id).length>0) return;
                    var editStr = "<input id='diyBtn_" +treeNode.id+ "' title='"+treeNode.name+"'  />";
                    aObj.after(editStr);
                    var btn = $("#diyBtn_"+treeNode.id);
                } else if (flagBoolean === 2) {
                    if (treeNode.parentTId && treeNode.getParentNode().id!=1) return;
                    $("#diyBtn_"+treeNode.id).unbind().remove();
                    $("#diyBtn_space_" +treeNode.id).unbind().remove();
                }

    以上。

  • 相关阅读:
    本地搭建Nginx服务器启动web项目
    BZOJ 1815: [Shoi2006]color 有色图(Polya定理)
    即将退役选手最后的挣扎
    类欧几里得算法
    UOJ#449. 【集训队作业2018】喂鸽子(期望dp)
    Luogu P3600 随机数生成器(期望+dp)
    毒题选讲选做
    UOJ#310.【UNR #2】黎明前的巧克力(FWT)
    DZY Loves Math 系列详细题解
    项目中经常遇到的跨域请求的几种方法
  • 原文地址:https://www.cnblogs.com/foxcharon/p/11076335.html
Copyright © 2011-2022 走看看