最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年04月11日 17:26:32   作者:hezhh  
這篇文章主要為大家詳細(xì)介紹了zTree插件下拉樹使用入門教程,感興趣的小伙伴們可以參考一下

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

這里使用簡單的數(shù)據(jù)格式(即簡單的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,用來封裝對應(yīng)查出來的數(shù)據(jù),如下:

public class ZtreeNode {

  // id
  private String id;
  // 父id
  private String pId;
  // 顯示名稱
  private String name;
  // 是否打開 (這里默認(rèn)是不打開的,如果需要打開,設(shè)為true)
  // private boolean open ;
  // 能否選擇 (設(shè)置節(jié)點是否能夠選擇,默認(rèn)都能選擇,設(shè)為true對應(yīng)的節(jié)點不能選擇)
  // private boolean nocheck ;
  
  /**getter and setter*/
}

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

然后,將從數(shù)據(jù)庫中查出來的數(shù)據(jù),轉(zhuǎn)換為對應(yīng)的ztree需要的bean,再轉(zhuǎn)換為相應(yīng)的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轉(zhuǎn)換為對應(yīng)的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;
  }

  // 根據(jù)文本內(nèi)容輸出AJAX
  protected String ajax(String text) {
    return ajax(text, HEADER_TEXT_CONTENT_TYPE);
  }
  
  // 根據(jù)操作狀態(tài)輸出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;
  }
  
  // 根據(jù)操作狀態(tài)、消息內(nèi)容輸出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;
  }
  
  // 根據(jù)Object輸出AJAX
  protected String ajax(Object object) {
    HttpServletResponse response = initResponse(HEADER_JSON_CONTENT_TYPE);
    JsonUtil.toJson(response, object);
    return NONE;
  }
  
  // 根據(jù)boolean狀態(tài)輸出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;
  }

這樣前臺所需要的數(shù)據(jù),就從庫里取出,并封裝成了對應(yīng)的Json。

接下來就是前臺的實現(xiàn)了,前臺需要導(dǎo)入的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修改的,如下(這里有冗余樣式?jīng)]有刪除掉);

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}

然后,就是對應(yīng)的下拉框:

<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>

這里有一個隱藏的文本框用來存放下拉框選擇內(nèi)容對應(yīng)的id。

對應(yīng)的腳本如下:

<SCRIPT type="text/javascript">
    
    var setting = {
      view: {
        dblClickExpand: false
      },
      data: {
        simpleData: {
          enable: true
        }
      },
      callback: {
        onClick: onClick
      },
      view: {
          // 不顯示對應(yīng)的圖標(biāo)
        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(){
       // 加載數(shù)據(jù)
      $.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>

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

如下圖所示:

如果,需要在修改頁面中回寫相應(yīng)的下拉列表數(shù)據(jù),添加如下的腳本:

<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>

以上就是本文的全部內(nèi)容,希望對大家學(xué)習(xí)zTree插件有所幫助。

相關(guān)文章

  • 關(guān)于微信小程序自定義tabbar問題詳析

    關(guān)于微信小程序自定義tabbar問題詳析

    微信小程序是一種全新的連接用戶與服務(wù)的方式,它可以在微信內(nèi)被便捷地獲取和傳播,同時具有出色的使用體驗,下面這篇文章主要給大家介紹了關(guān)于微信小程序自定義tabbar問題的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 關(guān)于innerHTML后丟失動態(tài)綁定的EVENT問題解決方法

    關(guān)于innerHTML后丟失動態(tài)綁定的EVENT問題解決方法

    用innerHTML取出一段內(nèi)容后再innerHTML回去,那么原來動態(tài)綁定的事件就會丟失,下面與大家分享下解決方法,感興趣的朋友可以參考下哈
    2013-05-05
  • 一文總結(jié)JS中邏輯運算符的特點

    一文總結(jié)JS中邏輯運算符的特點

    在JavaScript的眾多運算符里,提供了三個邏輯運算符&&、||和!,下面這篇文章主要給大家介紹了關(guān)于JS中邏輯運算符的特點,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • 網(wǎng)頁中的圖片的處理方法與代碼

    網(wǎng)頁中的圖片的處理方法與代碼

    昨天的一篇 圖片的alt屬性 文章評論中的啟發(fā),特將網(wǎng)頁中的圖片的一些處理方法 小小的總結(jié)一下
    2009-11-11
  • 微信小程序?qū)D片進(jìn)行canvas壓縮的方法示例詳解

    微信小程序?qū)D片進(jìn)行canvas壓縮的方法示例詳解

    這篇文章主要給大家介紹了關(guān)于微信小程序?qū)D片進(jìn)行canvas壓縮的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • JGrid中拖動改變列寬的腳本 原型

    JGrid中拖動改變列寬的腳本 原型

    JGrid 中,可以拖動改變列寬,簡單的原理就是改變相應(yīng)的 col 的 style.width 今天看到skybot 同學(xué)在問這個問題,就又把這個功能拿出來,單獨實現(xiàn)了一下(有改進(jìn))
    2008-07-07
  • 來自國外的頁面JavaScript文件優(yōu)化

    來自國外的頁面JavaScript文件優(yōu)化

    外部JavaScript文件塊下載和傷害你的頁面的性能,但有一個簡單的方法來解決此問題:并行使用動態(tài)腳本標(biāo)記和加載腳本,提高頁面加載速度和用戶體驗。
    2010-12-12
  • JS動態(tài)增刪表格行的方法

    JS動態(tài)增刪表格行的方法

    這篇文章主要介紹了JS動態(tài)增刪表格行的方法,涉及JavaScript針對表格元素動態(tài)操作相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-03-03
  • 原JS實現(xiàn)banner圖的常用功能

    原JS實現(xiàn)banner圖的常用功能

    這篇文章主要為大家詳細(xì)介紹了原JS實現(xiàn)banner圖的常用功能,,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • document.getElementById方法在Firefox與IE中的區(qū)別

    document.getElementById方法在Firefox與IE中的區(qū)別

    相信很多朋友在寫JavaScript的時候,對瀏覽器的兼容問題會感到很頭疼。這不,煩什么,什么就來了,特記錄下來,與大家分享。
    2010-05-05

最新評論

汉川市| 叶城县| 噶尔县| 新晃| 饶平县| 夏津县| 沅陵县| 祁连县| 阳西县| 甘肃省| 北碚区| 五台县| 香格里拉县| 温宿县| 稷山县| 都安| 宾川县| 钟山县| 崇州市| 长葛市| 睢宁县| 南郑县| 常宁市| 苏尼特左旗| 临海市| 永春县| 湖口县| 北辰区| 广安市| 长阳| 濮阳市| 民乐县| 电白县| 呼伦贝尔市| 句容市| 易门县| 本溪市| 如皋市| 荆州市| 鱼台县| 新巴尔虎左旗|