亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

zTree插件下拉樹使用入門教程

2019-11-20 10:16:37
字體:
來源:轉載
供稿:網友

最近,因為工作需要一個樹形下拉框的組件,經過查資料一般有兩種的實現方法。其一,就是使用zTree實現;其二,就是使用easyUI實現。因為公司的前端不是使用easyUI設計的,故這里我選擇了zTree來實現下拉樹。

這里使用簡單的數據格式(即簡單的Json格式)類似如下Json:

var zNodes =[      {id:1, pId:0, name:"北京"},      {id:2, pId:0, name:"天津"},      {id:3, pId:0, name:"上海"},      {id:6, pId:0, name:"重慶"},      {id:4, pId:0, name:"河北省", open:true, nocheck:true},      {id:41, pId:4, name:"石家莊"},      {id:42, pId:4, name:"保定"},      {id:43, pId:4, name:"邯鄲"},      {id:44, pId:4, name:"承德"},      {id:5, pId:0, name:"廣東省", open:true, nocheck:true},      {id:51, pId:5, name:"廣州"},      {id:52, pId:5, name:"深圳"},      {id:53, pId:5, name:"東莞"},      {id:54, pId:5, name:"佛山"},      {id:6, pId:0, name:"福建省", open:true, nocheck:true},      {id:61, pId:6, name:"福州"},      {id:62, pId:6, name:"廈門"},      {id:63, pId:6, name:"泉州"},      {id:64, pId:6, name:"三明"}     ];

這里首先需要一個實體bean,用來封裝對應查出來的數據,如下:

public class ZtreeNode {  // id  private String id;  // 父id  private String pId;  // 顯示名稱  private String name;  // 是否打開 (這里默認是不打開的,如果需要打開,設為true)  // private boolean open ;  // 能否選擇 (設置節點是否能夠選擇,默認都能選擇,設為true對應的節點不能選擇)  // private boolean nocheck ;    /**getter and setter*/}

 這里需要注意的是 pId 中的第二的字母是大寫的,如果寫成小寫的就不能構造成樹形結構,所有的都是根節點。

然后,將從數據庫中查出來的數據,轉換為對應的ztree需要的bean,再轉換為相應的Json,代碼如下:

// 獲取商品分類樹 返回json  public String getGoodsCategoryTreeJson() {    List<GoodsCategory> allGoodsCategoryList = goodsCategoryService.getGoodsCategoryTreeJson() ;    List<ZtreeNode> ztreelist = new ArrayList<ZtreeNode>();    for(GoodsCategory gcty : allGoodsCategoryList){      ZtreeNode treenade = new ZtreeNode();      treenade.setId(gcty.getId());      treenade.setpId(gcty.getParent()==null?"":gcty.getParent().getId());      treenade.setName(gcty.getName());      ztreelist.add(treenade);    }    return ajax(ztreelist);  }

 將list轉換為對應的Json方法,如下:

用到的Json工具包:

import org.springframework.base.util.JsonUtil;private static final String HEADER_ENCODING = "UTF-8";private static final boolean HEADER_NO_CACHE = true;private static final String HEADER_TEXT_CONTENT_TYPE = "text/plain";private static final String HEADER_JSON_CONTENT_TYPE = "text/plain";// AJAX輸出  protected String ajax(String content, String contentType) {    try {      HttpServletResponse response = initResponse(contentType);      response.getWriter().write(content);      response.getWriter().flush();    } catch (IOException e) {      e.printStackTrace();    }    return NONE;  }  // 根據文本內容輸出AJAX  protected String ajax(String text) {    return ajax(text, HEADER_TEXT_CONTENT_TYPE);  }    // 根據操作狀態輸出AJAX  protected String ajax(Status status) {    HttpServletResponse response = initResponse(HEADER_JSON_CONTENT_TYPE);    Map<String, String> jsonMap = new HashMap<String, String>();    jsonMap.put(STATUS_PARAMETER_NAME, status.toString());    JsonUtil.toJson(response, jsonMap);    return NONE;  }    // 根據操作狀態、消息內容輸出AJAX  protected String ajax(Status status, String message) {    HttpServletResponse response = initResponse(HEADER_JSON_CONTENT_TYPE);    Map<String, String> jsonMap = new HashMap<String, String>();    jsonMap.put(STATUS_PARAMETER_NAME, status.toString());    jsonMap.put(MESSAGE_PARAMETER_NAME, message);    JsonUtil.toJson(response, jsonMap);    return NONE;  }    // 根據Object輸出AJAX  protected String ajax(Object object) {    HttpServletResponse response = initResponse(HEADER_JSON_CONTENT_TYPE);    JsonUtil.toJson(response, object);    return NONE;  }    // 根據boolean狀態輸出AJAX  protected String ajax(boolean booleanStatus) {    HttpServletResponse response = initResponse(HEADER_JSON_CONTENT_TYPE);    Map<String, Object> jsonMap = new HashMap<String, Object>();    jsonMap.put(STATUS_PARAMETER_NAME, booleanStatus);    JsonUtil.toJson(response, jsonMap);    return NONE;  }  private HttpServletResponse initResponse(String contentType) {    HttpServletResponse response = ServletActionContext.getResponse();    response.setContentType(contentType + ";charset=" + HEADER_ENCODING);    if (HEADER_NO_CACHE) {      response.setDateHeader("Expires", 1L);      response.addHeader("Pragma", "no-cache");      response.setHeader("Cache-Control", "no-cache, no-store, max-age=0");    }    return response;  }

這樣前臺所需要的數據,就從庫里取出,并封裝成了對應的Json。

接下來就是前臺的實現了,前臺需要導入的js和css如下:

<link rel="stylesheet" href="${base}/template/ztree/css/demo.css" type="text/css"><link rel="stylesheet" href="${base}/template/ztree/css/zTreeStyle/zTreeStyle.css" type="text/css"><script type="text/javascript" src="${base}/template/ztree/js/jquery.ztree.core.js"></script>

 這里只有demo.css是自己添加的,其他都是官方制定的,demo.css是將官方的demo用到的css修改的,如下(這里有冗余樣式沒有刪除掉);

div.content_wrap {width: 400px;}div.content_wrap div.left{float: left;}div.content_wrap div.right{float: right;width: 340px;}div.zTreeDemoBackground {text-align:left;}ul.ztree {margin-top: 10px;border: 1px solid #617775;background: #fefefe;width:220px;height:360px;overflow-y:scroll;overflow-x:auto;}ul.log {border: 1px solid #617775;background: #f0f6e4;width:300px;height:170px;overflow: hidden;}ul.log.small {height:45px;}ul.log li {color: #666666;list-style: none;padding-left: 10px;}ul.log li.dark {background-color: #E3E3E3;}/* ruler */div.ruler {height:20px; width:220px; background-color:#f0f6e4;border: 1px solid #333; margin-bottom: 5px; cursor: pointer}div.ruler div.cursor {height:20px; width:30px; background-color:#3C6E31; color:white; text-align: right; padding-right: 5px; cursor: pointer}

然后,就是對應的下拉框:

<div class="content_wrap">  <div class="zTreeDemoBackground left">     <input id="citySel" class="formText" type="text" onclick="showMenu(); return false;" readonly value="" style="width:150px;"/>     <input id="treeids" type="hidden" name="goods.goodsCategory.id" >     <input type="button" onclick="showMenu();" value="∨">  </div></div> 8<div id="menuContent" class="menuContent" style="display:none; position: absolute;">  <ul id="treeDemo" class="ztree" style="margin-top:0;"></ul></div>

這里有一個隱藏的文本框用來存放下拉框選擇內容對應的id。

對應的腳本如下:

<SCRIPT type="text/javascript">        var setting = {      view: {        dblClickExpand: false      },      data: {        simpleData: {          enable: true        }      },      callback: {        onClick: onClick      },      view: {          // 不顯示對應的圖標        showIcon: false       }    };    function onClick(e, treeId, treeNode) {      var zTree = $.fn.zTree.getZTreeObj("treeDemo"),      nodes = zTree.getSelectedNodes(),      v = "";      ids = "";      nodes.sort(function compare(a,b){return a.id-b.id;});      for (var i=0, l=nodes.length; i<l; i++) {        v += nodes[i].name + ",";        ids += nodes[i].id + ",";      }      if (v.length > 0 ) v = v.substring(0, v.length-1);      var cityObj = $("#citySel");      cityObj.attr("value", v);      // 將選中的id放到隱藏的文本域中      if (ids.length > 0 ) ids = ids.substring(0, ids.length-1);      var treeids = $("#treeids");      treeids.attr("value", ids);    }    function showMenu() {      var cityObj = $("#citySel");      var cityOffset = $("#citySel").offset();      $("#menuContent").css({left:cityOffset.left + "px", top:cityOffset.top + cityObj.outerHeight() + "px"}).slideDown("fast");      $("body").bind("mousedown", onBodyDown);    }    function hideMenu() {      $("#menuContent").fadeOut("fast");      $("body").unbind("mousedown", onBodyDown);    }    function onBodyDown(event) {      if (!(event.target.id == "menuBtn" || event.target.id == "menuContent" || $(event.target).parents("#menuContent").length>0)) {        hideMenu();      }    }    var zNodes ;    $(document).ready(function(){       // 加載數據      $.ajax({          async : false,          cache:false,          type: 'POST',          dataType : 'json',          url: '${base}/admin/goods!getGoodsCategoryTreeJson.action',         error: function () {          alert('請求失敗');          },          success:function(data){           zNodes = data;         }        });       $.fn.zTree.init($("#treeDemo"), setting, zNodes);          });    </SCRIPT>

這樣,一個下拉框就做完了。

如下圖所示:

如果,需要在修改頁面中回寫相應的下拉列表數據,添加如下的腳本:

<script type="text/javascript">$(document).ready(function(){  if ("${goods.goodsCategory.id}"!="") {    var treeObj = $.fn.zTree.getZTreeObj("treeDemo");    var node = treeObj.getNodeByParam("id", "${goods.goodsCategory.id}" , null);    treeObj.selectNode(node,false , false);    onClick(event,"${goods.goodsCategory.id}",node,true);      }});</script>

以上就是本文的全部內容,希望對大家學習zTree插件有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久资源免费视频| 粉嫩av一区二区三区免费野| 日韩精品在线观看网站| 性视频1819p久久| 欧美激情videoshd| 亚洲一区二区免费| 欧美综合国产精品久久丁香| 亚洲人成77777在线观看网| 精品中文字幕视频| 国产精品午夜一区二区欲梦| 国产精品久久久久久久久久久新郎| 中文字幕欧美亚洲| 欧美日韩亚洲国产一区| 欧美福利在线观看| 久久久国产精品视频| 日韩在线高清视频| 亚洲欧美日韩一区二区三区在线| 亚洲第一区在线观看| 日韩精品在线观看一区二区| 91精品免费看| 国产一区深夜福利| 91在线观看免费高清完整版在线观看| 黑人精品xxx一区| 最近2019好看的中文字幕免费| 国产精品久久久久久久午夜| 日韩视频在线观看免费| 亚洲午夜女主播在线直播| 2019中文字幕免费视频| 亚洲欧美日韩在线高清直播| 91老司机在线| 久久精品视频网站| 日韩成人xxxx| 国产日韩在线观看av| 69**夜色精品国产69乱| 66m—66摸成人免费视频| 97超级碰碰碰| 国产一区二区美女视频| 久久久久久久91| 久久久久久久久91| 国产精品一区二区三| 欧美最顶级的aⅴ艳星| 精品无人国产偷自产在线| 精品久久久久久久久久ntr影视| 69影院欧美专区视频| www高清在线视频日韩欧美| 日本久久久久久久久| 亚洲丝袜一区在线| 亚洲欧洲一区二区三区在线观看| 成人午夜在线影院| 欧美精品一区在线播放| 中文字幕欧美在线| 亚洲国产精品女人久久久| 国产精品99免视看9| 欧美精品久久久久久久免费观看| 亚洲第一色中文字幕| 亚洲成色www8888| 久久乐国产精品| 国产精品av免费在线观看| 久久不射热爱视频精品| 日韩天堂在线视频| 成人97在线观看视频| 欧美精品在线观看91| 国产精品午夜视频| 成人激情视频小说免费下载| 亚洲欧美精品一区| 欧美精品做受xxx性少妇| 亚洲最大在线视频| 国产精品国产三级国产专播精品人| 亚洲黄色在线看| 国产精品视频免费在线观看| 日韩av一区在线| 国产精品美女在线观看| 久久国产精品久久久久久久久久| 欧美精品九九久久| 久久久久久美女| 国产精品久久久久久久久久99| 亚洲专区中文字幕| 国产精品久久久久久久久久久久| 欧美精品一区二区三区国产精品| 成人久久一区二区| 国产精品久久久久久久久久99| 欧美成人激情图片网| 91久久久亚洲精品| www.久久撸.com| 亚洲色图欧美制服丝袜另类第一页| 欧美日韩一区二区三区在线免费观看| 国产精品夫妻激情| 欧美激情中文字幕在线| 91美女片黄在线观看游戏| 欧美另类极品videosbestfree| 久久精品91久久香蕉加勒比| 亚洲欧美自拍一区| 北条麻妃久久精品| 久久久国产精品视频| 国产精品三级久久久久久电影| 日韩精品电影网| 日韩精品一区二区三区第95| 久久天堂电影网| 欧美日韩国产一区中文午夜| 亚洲色图17p| 国产精品国产亚洲伊人久久| 国产精品久在线观看| 亚洲成人久久久久| 深夜福利一区二区| 久久久伊人日本| 成人免费激情视频| 色综合色综合网色综合| 91亚洲精品久久久久久久久久久久| 国产国产精品人在线视| www日韩欧美| 久久亚洲国产精品成人av秋霞| 久久精品视频免费播放| 日本中文字幕久久看| 色诱女教师一区二区三区| 亚洲精品一区中文字幕乱码| 久久久久久高潮国产精品视| 午夜精品久久久久久久久久久久久| 91精品久久久久久久久久久久久久| 日韩免费电影在线观看| 国产精品v片在线观看不卡| 亚洲精品成人久久电影| 亚洲天堂av电影| 亚洲在线免费视频| 国产日韩换脸av一区在线观看| 91大神在线播放精品| 欧美日韩xxx| 黑人与娇小精品av专区| 国产亚洲人成网站在线观看| 国产精品美女午夜av| 亚洲天堂av在线免费观看| 日韩在线观看精品| 欧美不卡视频一区发布| 高潮白浆女日韩av免费看| 色一区av在线| 欧美乱妇高清无乱码| 欧美激情一级欧美精品| 福利视频导航一区| 中文欧美在线视频| 91精品中文在线| 国产一区二区在线播放| 亚洲伊人久久大香线蕉av| 欧洲精品久久久| 欧美午夜性色大片在线观看| 欧美日韩中文字幕综合视频| 91高清视频在线免费观看| 亚洲天堂开心观看| 国产精品视频免费在线| 日韩在线视频播放| 亚洲码在线观看| 91在线看www| 91社区国产高清| 国产精品无av码在线观看| 精品在线观看国产| 欧美日韩在线观看视频小说| 国产精品大片wwwwww| 国产99久久精品一区二区永久免费| 欧美日韩国产成人在线| 日本欧美黄网站| 国产精品pans私拍| 精品国内产的精品视频在线观看| 国产99视频在线观看| 国内精品久久久久影院 日本资源| 欧美激情视频一区二区| 韩日欧美一区二区|