使用条件:

使用zTree树形结构,需要在当前页面中载入zTree的js文件和样式文件

zTree核心js文件:jquery.ztree-2.6.js

zTree样式文件:

因为zTree是基于jquery,所以还需要对应的jQuery库文件

将这些文件引入使用页面:

<link rel="stylesheet" href="css/zTreeStyle.css" type="text/css">
   <script type="text/javascript" src="js/jquery-1.4.2.js"></script>
  <script type="text/javascript" src="js/jquery.ztree-2.6.js"></script>

简单使用:

用户需要在页面上新建一个tree对象,需要使用

var zTree = $("#tree").zTree(setting, zTreeNodes);
$("#tree")是获取页面上一个id为tree的<ul>元素

zTree()方法是加载树形结构,它需要两个参数,一个为setting,zTree 的参数配置数据,json数据格式

另一个为zTreeNodes ,其实这个参数是可选的,因为数据是放在setting对象的root属性下,如果root属性下已经存在数据,则可以不用再加载数据对象,例如异步加载数据后,重新加载树形结构的时候,便不需要再指定数据对象。

zTree 的数据参数,json数据格式

而var zTree 是创建树形结构后返回的一个jQuery对象,之后操作树形结构全部操作这个对象即可。

完整代码为:

<html>
  <head>
    <title>这里是测试页面</title>
   
   <link rel="stylesheet" href="css/zTreeStyle.css" type="text/css">
   <script type="text/javascript" src="js/jquery-1.4.2.js"></script>
  <script type="text/javascript" src="js/jquery.ztree-2.6.js"></script>
  <script type="text/javascript">
var setting = {
showLine: false,   //是否显示线,true为显示,false为不显示
checkable: true,//是否有可选框,true为可选,false为不可选
showIcon : false//是否有图标,true为有,false为没有,默认为true
};
//新建数据对象,json数据格式
var zTreeNodes1 = [
            { name:"手机", open:false, checked:true,
   
                  { name:"诺基亚", isParent:true},
                  { name:"三星"},
                  { name:"索爱"},
                  { name:"多普达"}
   
            { name:"电脑", open:true, checked:true,
   
                  { name:"硬件", checked:true},
                  { name:"整机", isParent:true, checked:true},
                  { name:"网络", checked:true}
   
            { name:"家电", open:false,
   
                  { name:"电视", checked:true},
                  { name:"冰箱"},
                  { name:"空调", isParent:true}
   
   
</script>
 </head>
 <body>
        <ul id="tree" class="tree" style="width:300px; overflow:auto;"></ul>
  </body>
  <script type="text/javascript">
       var zTree = $("#tree").zTree(setting, zTreeNodes1);  
  </script>
</html>
运行结果便如:

 Setting对象常用属性说明:

var setting = {
       isSimpleData : true,  //是否使用简单的数组结构
       treeNodeKey : "id",       //使用简单数组结构必须制定的节点自身id
           treeNodeParentKey : "pId",  //使用简单数组结构必须指定的父节点id
  
          showLine: false,   //是否显示线,true为显示,false为不显示
      checkable: true,   //是否有可选框,true为可选,false为不可选
      showIcon : false,  //是否有图标,true为有,false为没有,默认为true
   
   
   callback : {
        click: zTreeOnClick   //回调函数,需要重写这个回调函数
    
   };

如果使用简单数组格式,数据对象的格式便需要如下:

//数据对象,通过pId字段指定上级目录
      var zTreeNodes3 = [
            {"id":1, "pId":0,  "name":"test1"},
                {"id":11, "pId":1,  "name":"test11"},
                {"id":12, "pId":1,  "name":"test12"},
                {"id":111, "pId":11,  "name":"test111"},
                {"id":112, "pId":11,  "name":"test222"},
                {"id":113, "pId":11,  "name":"test3"}

   完整代码如下:

<html>
  <head>
    <title>测试</title>
   <meta http-equiv="pragma" content="no-cache">
   <meta http-equiv="cache-control" content="no-cache">
   <meta http-equiv="expires" content="0">   
   
   <link rel="stylesheet" href="css/zTreeStyle.css" type="text/css">
   <script type="text/javascript" src="js/jquery-1.4.2.js"></script>
     <script type="text/javascript" src="js/jquery.ztree-2.6.js"></script>
  
     <script type="text/javascript">
        //新建一个配置对象,json数据格式
       var setting = {
             isSimpleData : true,  //是否使用简单的数组结构
             treeNodeKey : "id",       //使用简单数组结构必须制定的节点自身id
             treeNodeParentKey : "pId",  //使用简单数组结构必须指定的父节点id
  
             showLine: false,   //是否显示线,true为显示,false为不显示
            checkable: true,   //是否有可选框,true为可选,false为不可选
            showIcon : false,  //是否有图标,true为有,false为没有,默认为true
   
   
                    click: zTreeOnClick      //回调函数,协议重写这个回调函数
    
   
   
   
       //回调函数:zTreeOnClick,当用户点击树形结构的节点时触发
      function zTreeOnClick(event, treeId, treeNode) {
             //treeNode为用户点击的节点
            alert(treeNode.tId + ", " + treeNode.name); 
   
   
       //数据对象2,简易数据结构
      var zTreeNodes2 = [
               {"id":1, "pId":0,  "name":"test1","open":true},
                {"id":11, "pId":1,  "name":"test11","open":true},
                {"id":12, "pId":1,  "name":"test12"},
                {"id":111, "pId":11,  "name":"test111"},
                {"id":112, "pId":11,  "name":"test222"},
                {"id":113, "pId":11,  "name":"test3"}
   
   
     </script>
  </head>
  
  <body>
        <ul id="tree" class="tree" style="width:300px; overflow:auto;"></ul>
  </body>
  <script type="text/javascript">
       var zTree = $("#tree").zTree(setting, zTreeNodes2);  
  </script>
</html>
运行效果便如:

而因为重写了zTreeOnClick回调函数,所以点击节点的时候,会触发回调函数

数据对象属性介绍

checked:当 setting.checkable时有效,设定节点的 CheckBox 是否被勾选,默认是   false

Click:设定节点在鼠标点击后做的事情,相当于 οnclick="...." 的内容,可用于一些简单操作,如果过于复杂的,建议通过 click事件进行控制处理

Icon:设定节点的自定义图标,以替换 css 样式中配置的普通图标。(设定时请注意指定图标的相对路径是否正确)

Name:节点显示的名称。

Open:设置父节点初始化展开状态。

对于不需要异步获取子节点信息的父节点有效。

Target:对于存在 url属性的节点,设置点击后跳转的目标,同超链接的 target 属性("_blank", "_self"等)

Url:指定节点被点击后的跳转页面 URL 地址

 常用方法介绍:

其中zTree是加载树形结构之后返回的对象

function ceshi(){
          //重新加载树形结构,可以指定另外的setting对象和另外的
数据对象,进行重新加载
          var zTree = $("#tree").zTree(setting2, zTreeNodes3);
           //获取勾选状态改变的节点集合
          var nodes = zTree.getChangeCheckedNodes();
           //获取被选中的节点集合
          var nodes = zTree.getCheckedNodes();
           //获取id为111的节点,这里是精确获取
          var node = zTree.getNodeByParam("id",111);
           //获取name中包含"abc"的节点,模糊查询,
          var nodes =       zTree.getNodesByParamFuzzy("name","abc", node);
           //添加新的节点,添加新的数据对象到指定的父节点下,其中parentNode为欲添加的父节点,如果要在根节点目录下添加,则指定parentNode为null
          zTree.addNodes(parentNode, newNodes);
           //获取被选中的节点
          var selectedNode = zTree.getSelectedNode();

 通过ajax异步获取数据

<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>这是测试树形结构</title>
    
   <meta http-equiv="pragma" content="no-cache">
   <meta http-equiv="cache-control" content="no-cache">
   <meta http-equiv="expires" content="0">    
   
   <link rel="stylesheet" href="css/zTreeStyle.css" type="text/css">
   <script type="text/javascript" src="js/jquery-1.4.2.js"></script>
     <script type="text/javascript" src="js/jquery.ztree-2.6.js"></script>
  
     <script LANGUAGE="JavaScript">
  
       var zTree1;
       var   setting = {
             checkable: true,
            async: true, //允许异步获取数据
            asyncUrl: "",  //获取节点数据的URL地址
            asyncParam: ["name", "id"],   //获取节点数据时,必须的数据名称,例如:id、name
            asyncParamOther: []   //其它参数 ( key, value 键值对格式)
   
       //初始化时的数据对象
      var zNodes =[   
                { "name":"google", "url":"http://g.cn", "target":"_blank","click":"alert('myname')"},
                { "name":"baidu", "url":"http://baidu.com", "target":"_blank"},
                { "name":"sina", "url":"http://www.sina.com.cn", "target":"_blank"}
   
       //该方法用于预处理异步获取的数据,其中的childNodes便是异步获取的数据对象
      function dataFilter(treeId, parentNode, childNodes) {
          //将初始化时的数据对象赋予一个变量
         var nodes = zNodes;
         if (childNodes) {
            for(var i =0; i<childNodes.length; i++) {
                //将新获取的数据对象一个个的加入nodes中
   
   
   
          //返回数据对象
         return nodes;
   
      function refreshTree(asyncUrl) {
          //设置异步获取数据的地址,还可以是setting.asyncUrl = "data/note.txt"等,不止限于服务器获取
         setting.asyncUrl = "testAction_huoqu.action";
          //设定异步获取数据后使用dataFilter方法进行数据处理
   
          //重新加载,这里不需要再指定数据对象
         zTree1 = $("#treeDemo").zTree(setting);
   
   
   
     </script>
  </head>
  
  <body>
        <ul id="treeDemo" class="tree" style="width:300px; overflow:auto;"></ul>
        <input type="button" value="在线获取数据" onclick="refreshTree();">
  </body>
  <script type="text/javascript">
       zTree1 = $("#treeDemo").zTree(setting, zNodes);
  </script>
</html>

服务器端代码:

Struts2代码

public String huoqu(){
      JSONArray jsonArray = new JSONArray();
      JSONObject one = new JSONObject();
   
      one.put("name","魔兽世界");
      one.put("url","www.wow.com");
      one.put("target", "_blank");
   
      JSONObject two = new JSONObject();
      two.put("name","剑侠情缘");
      two.put("url","www.jianxia.com");
      two.put("target", "_blank");
   
      JSONObject three = new JSONObject();
      three.put("name","传奇");
      three.put("url","www.mir2.com");
      three.put("target", "_blank");
   
   
   
   
   
      HttpServletResponse response = ServletActionContext.getResponse();
       //返回页面的信息为utf-8编码,不加这个提示信息就会变成乱码
      response.setCharacterEncoding("utf-8");
       //返回页面的信息为html/text格式,不加这个返回页面的信息就会是整个页面
      response.setContentType("html/text");
   
       //将信息通过ajax返回
      PrintWriter out = null;  
      try {
   
   
   
   
      } catch (IOException e) {
          // TODO Auto-generated catch block 
   
   
   
      return"testZTreePage";
   }

详情请查看api