jQuery zTree.js 使用

Java知识分享(spring全家桶、面试突击)

每天进步一点点


最近做一个任务,地址维护(要求通过树去维护):
1、单击异步加载子节点
2、添加新子节点
3、修改地址名称
4、删除节点
5、通过拖拽改变父节点

参考同事以前的例子,使用dTree.js去实现一版,在使用中发现加载树很慢,dTree.js实现树原理查询所有数据,地址有41144多条数据遍历生成树结构。
继而猜想能否异步加载呢?研究dTree.js半天不得而知,后翻越网站zTree.js功能更加强大,不仅满足异步加载,还有拖拽等功能。
ztree是基于jquery的一个插件,ztree默认显示的是name,可以通过setting: 设置属性,来指定代替name

代码基本如下 :

    <link href="/misc/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" type="text/css" />

    <script src="/misc/js/ztree/jquery-1.4.4.min.js"></script>
    <script src="/misc/js/ztree/jquery.ztree.all.js"></script>
    <script src="/misc/js/ztree/jquery.ztree.core.js"></script>
    <script src="/misc/js/ztree/jquery.ztree.excheck.js"></script>
    <script src="/misc/js/ztree/jquery.ztree.exedit.js"></script>
    <script src="/misc/js/ztree/jquery.ztree.exhide.js"></script>

html 部分

<div class="widget-body">
    <div class="widget-main padding-2">
        <ul id="ztree" class="ztree" role="tree"></ul>
    </div>
</div>

js代码如下:

<script type="text/javascript">
var setting = {
         check: {
            enable: true,
            chkStyle: "radio",
            radioType: "all"
        },
        edit: {
            enable: true,
            showRemoveBtn: showRemoveBtn, //删除
            showRenameBtn: showRenameBtn, //重命名
            drag: {
                isCopy: false,//所有操作都是move
                isMove: true,
                prev: true,
                next: true,
                inner: true
            }
        },
        data: {
        	key:{
                name:"name" // 显示名称
            },
            simpleData: {
            	enable : true,
                idKey : "id", // id
                pIdKey : "pId", // 父id
                rootPId : null
            }
        }, 
        callback: {
            onExpand: zTreeOnExpand,
            onClick: onClick
        }
    };

function showRemoveBtn(treeId, treeNode) {
    return !treeNode.isFirstNode;
}
function showRenameBtn(treeId, treeNode) {
    return !treeNode.isLastNode;
}
 var newCount = 1;

//添加
    function addHoverDom(treeId, treeNode) {
        var sObj = $("#" + treeNode.tId + "_span");
        if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0) return;
        var addStr = "<span class='button add' id='addBtn_" + treeNode.tId
            + "' title='add node' onfocus='this.blur();'></span>";
        sObj.after(addStr);
        var btn = $("#addBtn_"+treeNode.tId);
        if (btn) btn.bind("click", function(){
            var zTree = $.fn.zTree.getZTreeObj("treeDemo");
            zTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, orgName:"new node" + (newCount++)});
            return false;
        });
    };


//重命名时执行的函数
function onRename(e, treeId, treeNode, isCancel) {

}

//删除节点时执行的函数
function onRemove(e, treeId, treeNode) {

}



//用于捕获节点拖拽操作结束的事件回调函数  默认值: null
function onDrop(event, treeId, treeNodes, targetNode,moveType) {
    //拖拽成功时,修改被拖拽节点的pid
    console.log(event)
    console.log(treeId +'11111')
    console.log(treeNodes )
    console.log(treeNodes[0].parentCode)
    console.log(targetNode)
    console.log(moveType)
    $.ajax({
        type:'post',
        url: '',
        dataType: "text",
        async: false,
        success: function (data) {
        },
        error: function (msg) {
        }
    });
}

// 单击事件
function onClick(e, treeId, treeNode, clickFlag) {
  	// 展开子节点
  	var treeNodeId = treeNode.id;
   	$.post(
   			'/cityZtree/getCityZtree',
            {parentId: treeNodeId},
               function (data) {
                   var tree = $.fn.zTree.getZTreeObj("ztree");

                   if (!treeNode.zAsync) {
                       tree.addNodes(treeNode, data);
                       treeNode.zAsync = true;
                   } else {
                       tree.reAsyncChildNodes(treeNode, "refresh");
                   }
               }
       );
  } 

    // 加载展开方法
    function zTreeOnExpand(event, treeId, treeNode) {
        var treeNodeId = treeNode.id;
        $.post(
                '/cityZtree/getCityZtree',
                {parentId: treeNodeId},
                function (data) {
                    var tree = $.fn.zTree.getZTreeObj("ztree");

                    if (!treeNode.zAsync) {
                        tree.addNodes(treeNode, data);
                        treeNode.zAsync = true;
                    } else {
                        tree.reAsyncChildNodes(treeNode, "refresh");
                    }
                }
        );
    }

    //首次进入加载level为1的
    $(function () {
        $.post(
                '/cityZtree/getCityZtree',
                function (data) {
                    $.fn.zTree.init($("#ztree"), setting, data);

                }
        );
});

</script>

数据

DROP TABLE IF EXISTS `city_ztree`;
CREATE TABLE `city_ztree` (
  `id` varchar(36) NOT NULL,
  `city_name` varchar(50) DEFAULT NULL,
  `parent_id` varchar(36) DEFAULT NULL,
  PRIMARY KEY (`id`)
) E

INSERT INTO city_ztree VALUES (‘1a’, ‘福建省’, ‘0’);
INSERT INTO city_ztree VALUES (‘1a1’, ‘福州市’, ‘1a’);
INSERT INTO city_ztree VALUES (‘1a2’, ‘厦门市’, ‘1a’);
INSERT INTO city_ztree VALUES (‘1a3’, ‘泉州市’, ‘1a’);
INSERT INTO city_ztree VALUES (‘1a4’, ‘漳州市’, ‘1a’);
INSERT INTO city_ztree VALUES (‘1a5’, ‘莆田市’, ‘1a’);
INSERT INTO city_ztree VALUES (‘1a6’, ‘宁德市’, ‘1a’);
INSERT INTO city_ztree VALUES (‘1a7’, ‘三明市’, ‘1a’);
INSERT INTO city_ztree VALUES (‘1a8’, ‘南平市’, ‘1a’);
INSERT INTO city_ztree VALUES (‘1a9’, ‘龙岩市’, ‘1a’);
INSERT INTO city_ztree VALUES (‘2b’, ‘浙江省’, ‘0’);
INSERT INTO city_ztree VALUES (‘3c’, ‘广东省’, ‘0’);
INSERT INTO city_ztree VALUES (‘4d’, ‘江苏省’, ‘0’);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值