zTree 开发过程中常见问题

这一篇博文就专门作为总结 zTree 的常见问题解答板块了。希望能对刚开始使用 zTree 的朋友们起到一些帮助。

1. zTree一定要使用 JQuery 的核心包吗?(2010-08-11)
答:zTree 是在 JQuery 核心包的基础上开发出来的专用于 WEB 上显示树形数据的插件。目前使用的JQuery版本是 jquery-1.4.2.js

2. 为什么 zTree 无法使用我生成的 JSON 数据?(2010-08-11)
答:请务必区分 JSON 格式的字符串 和 JSON 数据对象。 zTree 使用的是 JSON 数据对象,不是 JSON 格式的字符串。
____举例:
______(1)JSON 格式的字符串: var nodes = "[{id:1, name:'test1'}, {id:2, name:'test2'} ]";
______(2)JSON 数据对象: var nodes = [{id:1, name:'test1'}, {id:2, name:'test2'} ];

3. 为什么 API 文档中的 getNodes() 方法只能得到 zTree 的根节点,而不是全部节点?(2010-08-11)
答:getNodes()方法返回值是 Array(JSON) 类型的,并不是说把全部节点转换为数组传递回来,因为这样对于树这种数据类型来说,就没有太大意义了。 之所以是Array,主要是因为根节点可能会有若干个,至于根节点下面的子节点,都保存在每个 treeNode 数据的 nodes 属性下,整个数据对象的结构没有发生任何改变。(详情请参见API文档中 参数 --> zTreeNodes详解内的各个属性说明)。
____如果想遍历全部节点,请使用递归方法遍历即可——“JS操作 演示”的页面中有遍历的样例代码。

4. 怎样才能获取 checkbox 上打勾的节点并传递给后台服务器?(2010-08-11)
答:首先说如何获得全部打勾的节点——使用 getCheckedNodes(checked) 方法即可(详情请参见API文档中 方法 --> 获取 --> getCheckedNodes(checked) 内的各个属性说明)。
____然后说说给服务器提交数据的问题:提交数据无非是 Get 或者 Post,一般建议使用 Post 方式。不管用哪种方式都是需要提交字符串给后台的。一般是把需要的ID排列成逗号分隔的字符串即可(例如:1,2,3等);如果一定使用 JSON 格式提交,就将得到的 JSON 对象转换为 JSON 格式的字符串,我们建议不要将得到的整个 zTreeNode 对象全都转成 JSON 对象传递,只保留自己后台需要的数据即可。

5. 为什么我的 zTree 样式乱套了?(2010-09-06)
答:zTree 的主要样式都依靠了 css 进行设定,在你所设计的页面中,如果针对 zTree 容器的父容器有了较多的样式设定,则有可能会导致 zTree 的样式异常,这时候你需要做的是利用 css 的命名规则,编写能覆盖部分关键样式的新样式,保证 zTree 能够正常显示。当然最好的办法是尽量避免这种情况发生。

举例(特别感谢 zsy619):
使用模板页,结构如下:
    

 <div id="Guide_back">
        <ul>
            <li id="Guide_top">
                <div id="Guide_toptext">
                    <asp:ContentPlaceHolder ID="CphTitle" runat="server">
                    </asp:ContentPlaceHolder>
                </div>
            </li>
            <li id="Guide_main">
                <div id="Guide_box">
                    <div class="zTreeDemoBackground">
                      <ul id="treeDemo" class="tree"></ul>
                    </div>
                </div>
            </li>
        </ul>
    </div>


其中模板页定义了样式:

#Guide_back, #Guide_back ul, #Guide_back li
{
    padding: 0px;
    margin: 0px;
    list-style-type: none;
}


这样将影响树型结构显示,没有层次关系了;

解决方法:
在页面定义以下样式:

#treeDemo , #treeDemo ul, #treeDemo li
{
    margin: 0;
    padding: 0 0 0 5px;
    list-style-type: none;
}


6. 如何在异步加载后自动选中第一个节点?(2010-09-14)
答:这个问题首先感谢 zsy619

解决方案参考如下:
定义一个全局变量 isFirst
var zTreeObj;
var setting;
var isFirst = false;
页面加载函数中:

$(document).ready(function() {
isFirst = true;
zTreeObj = $("#ulTree").zTree(setting, zNodes);
});


异步加载函数:

function zTreeOnAsyncSuccess(event, treeId, msg) {
if (isFirst) {
var nodes = zTreeObj.getNodes();
zTreeObj.selectNode(nodes[0]);
}
}


补充:
至于是否需要在 zTreeOnAsyncSuccess 中重新把isFirst设置成false呢? 这就看你的需求了,是每次异步加载都要自动选择第一个节点还是说仅仅第一次的异步加载后自动选择。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ZTree是一个基于jQuery的树形结构插件,可以用于显示树形菜单、目录结构等。在Vue项目使用ZTree,需要先安装ZTree插件,然后在Vue组件引入和使用。 步骤如下: 1. 在Vue项目安装ZTree插件: ``` npm install jquery ztree --save ``` 2. 在Vue组件引入jQueryZTree插件: ```javascript import $ from 'jquery' import 'ztree/js/jquery.ztree.all.min.js' import 'ztree/css/metroStyle/metroStyle.css' ``` 其,`jquery.ztree.all.min.js`是ZTree的核心文件,`metroStyle.css`是一款ZTree的皮肤。 3. 在Vue组件定义一个div元素,用于显示ZTree: ```html <template> <div id="tree"></div> </template> ``` 4. 在Vue组件的`mounted`钩子函数,初始化ZTree,并将数据渲染到树形菜单: ```javascript mounted() { // 初始化ZTree let setting = { view: { selectedMulti: false }, data: { simpleData: { enable: true } }, callback: { onClick: this.onClick } } let zNodes = [ { id:1, pId:0, name:"父节点 1", open:true}, { id:11, pId:1, name:"子节点 1-1"}, { id:12, pId:1, name:"子节点 1-2"}, { id:13, pId:1, name:"子节点 1-3"}, { id:2, pId:0, name:"父节点 2", open:true}, { id:21, pId:2, name:"子节点 2-1"}, { id:22, pId:2, name:"子节点 2-2"}, { id:23, pId:2, name:"子节点 2-3"}, { id:3, pId:0, name:"父节点 3", open:true}, { id:31, pId:3, name:"子节点 3-1"}, { id:32, pId:3, name:"子节点 3-2"}, { id:33, pId:3, name:"子节点 3-3"} ] $.fn.zTree.init($("#tree"), setting, zNodes) }, methods: { // 点击节点事件 onClick(event, treeId, treeNode) { console.log(treeNode.name) } } ``` 其,`zNodes`变量是一个数组,用于存储树形菜单的数据。`setting`变量是一个对象,用于配置ZTree的属性,例如是否允许多选、数据格式等。`$.fn.zTree.init`方法用于初始化ZTree,其`$("#tree")`表示树形菜单的容器元素,`setting`表示ZTree的配置,`zNodes`表示树形菜单的数据。 5. 最终效果如下图所示: <img src="https://i.loli.net/2022/01/08/aJZ9zVX8q3WOhlY.png" alt="ztree-demo.png" style="zoom:50%;" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值