jQuery ztree实现动态树形多选菜单_jquery

我用到的版本ztree core v3.5.24,需要引入的js,css,jquery.js,jquery.ztree.core.js,jquery.ztree.excheck.js(多选框可选),zTreeStyle.css。
需要注意的指向父节点的pId,我开始写的是pid一开始没注意,默认的是pId,当然可以pIdKey指定自定义的(未测)。还有如果图片没显示肯定是没引入img图片,记得写好路径。

1、先介绍初始化加载ztree

 jsp

<div >
  <ul id="treeDemo" class="ztree" style="margin-top: 0; width: 160px;">
  </ul>
</div>

js

<script type="text/javascript">
$(function(){
  $.ajax({
    url: '${contextPath}/om/quoteOmRequest.do?flag=init',
    data: {
      name : '1' //随便写的,传入后台的值
    },
    type:'post',
    traditional: true,
    success: function(data){
      var dataObj = eval(data);
      var zTreeObj;
      var setting = {
          data: {
            simpleData: {
              enable:true,
              /* idKey: "id",
              pIdKey: "pId" */
            }
          },
          check: {
            enable: true,
            chkboxType :{ "Y" : "", "N" : "s" } //Y:勾选(参数:p:影响父节点),N:不勾(参数s:影响子节点)[p 和 s 为参数,参数都不写""为全不影响]
          },
          callback: {
            onCheck:
               function() {
                  var zTree = $.fn.zTree.getZTreeObj("treeDemo");
                  var checkCount = zTree.getCheckedNodes(true);
                  var classpurview = "";
                  for(var i=0;i<checkCount.length;i++) {
                      classpurview += checkCount[i].id+","   //存入数据的id,比如这种形式"1,2,5," 后台截取下
                  }
                  /* alert(classpurview); */
              } ,
          },
          view: {
            showLine: true,
            showIcon: true,
            dblClickExpand: true
          },
      };
      var zNodes = dataObj;
      $(document).ready(function(){
        $.fn.zTree.init($("#treeDemo"), setting, zNodes);
      });
    },
    error : function() {
      alert("异常!");
    }
  });
});
</script>

后台部分可以参考2延迟加载

2、延迟加载ztree
jsp一样的,js有所有区别,这个参考了官方api

<script type="text/javascript">
var setting = {
    view: {
      selectedMulti: false
    },
    check: {
      enable: true,
      chkboxType :{ "Y" : "", "N" : "s" } //Y:勾选(参数:p:影响父节点),N:不勾(参数s:影响子节点)[p 和 s 为参数,参数都不写""为全不影响]
    },
    async: {
      enable: true,
      url:"${contextPath}/om/quoteOmRequest.do?flag=ajax",
      autoParam:["id"],
      dataFilter: filter
    },
    callback: {
      beforeClick: beforeClick,
    }
  };

  function filter(treeId, parentNode, childNodes) {
    if (!childNodes) return null;
    for (var i=0, l=childNodes.length; i<l; i++) {
      childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
    }
    return childNodes;
  }
  function beforeClick(treeId, treeNode) {
    if (!treeNode.isParent) {
      alert("请选择父节点,此节点是根节点...");
      return false;
    } else {
      return true;
    }
  }

  $(document).ready(function(){
    $.fn.zTree.init($("#treeDemo"), setting);
  });
</script>

后台部分,也包含了1的后台,先看核心代码,这个用的struts,哪个框架都差不多。

    String flag = request.getParameter("flag");
    if(flag.equals("init")){//直接加载ztree
      List<Inner> list = getTrees();//得到所有节点
      try {
        convertListToJson(list);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }else if(flag.equals("ajax")){//延迟加载ztree
      String id = request.getParameter("id");
      if(id==null){//第一次进入初始化父节点
        List<Inner> list = new ArrayList<OmRequestImpl.Inner>();
        Inner in1=getById(1);
        Inner in5=getById(5);
        list.add(in1);
        list.add(in5);//测试用的,得到初始化0级父节点,应该从数据库中获取。
        try {
          convertListToJson(list);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }else{//根据父节点id加载对应的子节点
        List<Inner> list = getChilds(Integer.valueOf(id));//通过父id取得子节点集合,测试就自己写个方法,应该从数据库中获取。
        try {
          convertListToJson(list);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }

这里涉及了一些方法,我为了测试方便自己写了个测试bean,正式的直接从数据库中获取。下面是bean及一些小方法。

public class Inner{
    private Integer id;
    private Integer pId; //指向父节点id
    private String name; //显示的内容
    private String isParent;//是否是父节点
    public Inner(){
      this.isParent="false";
    }
    public String getIsParent() {
      return isParent;
    }
    public void setIsParent(String isParent) {
      this.isParent = isParent;
    }
    public Integer getpId() {
      return pId;
    }
    public void setpId(Integer pId) {
      this.pId = pId;
    }
    public Integer getId() {
      return id;
    }
    public void setId(Integer id) {
      this.id = id;
    }
    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
}

// -- 将运行结果用json字符返回客户端
  public void convertListToJson(List<?> list)throws Exception{
      JSONArray json = JSONArray.fromObject(list);
      response.setHeader("Cache-Control", "no-cache");
      response.setContentType("text/html; charset=UTF-8");
      PrintWriter writer;
      writer = response.getWriter();
      writer.write(json.toString());
      writer.close();
  }

这些方法可忽略,测试用的,可通过数据库获取

public List<Inner> getTrees(){
    Inner in=new Inner();
    in.setId(1);
    in.setpId(0);
    in.setIsParent("true");
    in.setName("父节点1");
    Inner in1=new Inner();
    in1.setId(2);
    in1.setpId(1);
    in1.setName("子节点11");
    in1.setIsParent("true");
    Inner in2=new Inner();
    in2.setId(3);
    in2.setpId(1);
    in2.setName("子节点12");
    Inner in3=new Inner();
    in3.setId(4);
    in3.setpId(2);
    in3.setName("子节点111");
    Inner in4=new Inner();
    in4.setId(5);
    in4.setpId(0);
    in4.setIsParent("true");
    in4.setName("父节点2");
    Inner in5=new Inner();
    in5.setId(6);
    in5.setpId(5);
    in5.setName("子节点21");
    List<Inner> list=new ArrayList<Inner>();
    list.add(in);
    list.add(in1);
    list.add(in2);
    list.add(in3);
    list.add(in4);
    list.add(in5);
    return list;
  }
  public Inner getById(Integer id){
    List<Inner> list = getTrees();
    for (Inner inner : list) {
      if(id==inner.getId()){
        Inner in=inner;
        return in;
      }
    }
    return null;
  }
  public List<Inner> getChilds(Integer id){
    List<Inner> list = getTrees();
    List<Inner> result =new ArrayList<OmRequestImpl.Inner>();
    for (Inner inner : list) {
      if(id.intValue()==inner.getpId().intValue()){
        result.add(inner);
      }
    }
    return result;
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索jquery树形菜单
ztree多选菜单
jquery ztree树形菜单、ztree下拉框树形多选、ztree树形下拉菜单、ztree三级树形菜单、ztree树形菜单,以便于您获取更多的相关知识。

时间: 2024-09-25 11:19:11

jQuery ztree实现动态树形多选菜单_jquery的相关文章

jQuery zTree加载树形菜单功能_jquery

由于项目中需要设计树形菜单功能,于是百度找相关资料,发现zTree方面的资料不少,觉得挺不错,而且zTree官方也有API文档,介绍的非常详细,经过一番捣腾之后,终于给弄出来了,所以便记下来,也算是学习zTree的一个总结吧. zTree的介绍: 1.zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 2.zTree v3.0 将核心代码按照功能进行了分割,不需要的代码可以不用加载 3.采用了 延迟加载 技术,上万节点轻松加载,即使在 IE6 下也能基本

jQuery结合CSS制作动态的下拉菜单_jquery

当要在一个有限的导航菜单空间放一个大的子菜单时,我们一般采用下拉菜单的形式来弥补空间的不足.本文将带大家用最少的时间,使用jQuery和CSS结合制作一个动态的下拉菜单. XHTML 首先是要在页面的head部分引入jquery库,这是必须的. <script type="text/javascript" src="js/jquery.js"></script> 接着我使用一个无序列表来构建菜单. <ul class="men

jQuery定义背景动态切换效果的方法_jquery

本文实例讲述了jQuery定义背景动态切换效果的方法.分享给大家供大家参考.具体如下: 通过下面的jQuery插件,你可以将图片放在一个数组里,然后告诉jQuery图片需要在什么地方背景轮换 (function($){ var defaultSettings; var divfg, divbg; var fadeInterval; var fqTimer; var currImg = 0; var displImg = 0; var running = false; // Setup setti

Jquery实现仿京东商城省市联动菜单_jquery

本文实例讲述了Jquery实现仿京东商城省市联动菜单的简单实例代码.分享给大家供大家参考.具体如下: 运行效果截图如下: 具体代码如下: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" href=&q

jquery实现的动态回到顶部特效代码_jquery

本文实例讲述了jquery实现的动态回到顶部特效代码.分享给大家供大家参考,具体如下: 这款jquery动态回到顶部特效,不是一下子就回到了网页顶部,而是带点缓冲的效果,有动画效果,使用了jQuery插件,这是个非常常用的网页特效,希望大家喜欢哦. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-back-top-dh-style-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DT

jQuery+ajax实现动态执行脚本的方法_jquery

本文实例讲述了jQuery+ajax实现动态执行脚本的方法.分享给大家供大家参考.具体分析如下: 有时候,在页面初次加载时就取得所需的全部JavaScript也是没有必要的.具体需要取得哪个脚本,要视用户的操作而定.虽然可以在需要时动态地引人<script>标签,但注人所需代码的更优雅的方式则是通过jQueiy直接加载.js文件. 向页面中注人脚本与加载HTML片段一样简单.但在这种情况下,需要使用全局函数 $.getScript(),这个全局函数与它的同辈函数类似,接受一个URL参数以查找脚

jquery zTree异步加载简单实例讲解_jquery

本文实例讲解了jquery zTree异步加载,分享给大家供大家参考,具体内容如下 web.xml中Servlet配置如下: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XM

jquery zTree异步加载简单实例分享_jquery

首先提供Ztree官方网站http://www.ztree.me. Ztree是一个使用jQuery实现的JSP页面的各种功能树,本文介绍一个异步获取数据到下拉树的实现方式. 当前版本Ztree 3.5.01 simple.html 复制代码 代码如下: <!DOCTYPE html> <html> <head> <title>simple.html</title> <meta http-equiv="keywords"

jQuery仿京东商城楼梯式导航定位菜单_jquery

实现京东商城楼梯式导航定位菜单:滚动定位菜单项和点击定位菜单项! 涉及知识点:find().parent().offset().scroll()等jQ函数,请自觉复习各种函数! html代码: <!-- 导航菜单 --> <div id="menu"> <ul> <li>1F<span>服饰</span></li> <li>2F<span>美妆</span></