jquery实现移动端多级树形样式

要在老的移动端项目上实现一个树形展示数据的功能,按照惯例先去网上偷一下别人的成果,翻了好久都没有找到合适的,好吧,自己动手撸吧

先上效果图 (Ps:没有设计稿,自己凭空想象出来的,非专业前端将就着看吧)

上代码

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title></title>
  <meta name="viewport" content="initial-scale=1, maximum-scale=1">
  <link rel="shortcut icon" href="/favicon.ico">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
  <meta content="telephone=no" name="format-detection">
  <meta content="email=no" name="format-detection">

  <link rel="stylesheet" href="css/style.css">
  <style type="text/css">
    #treeData {
      padding-left: 0;
      border-bottom: 1px solid #e7e7e7;
    }
    #treeData ul {
      padding-left: 0;
    }
    .tree-item{
      list-style-type: none;
      border-top: 1px solid #e7e7e7;
      line-height: 35px
    }
    .item-content{
      display: block;

    }
    .tree-title{
      display: block;
    }
    .tree-icon {
      border-radius: 50%;
      height: 20px;
      width: 20px;
      display: inline-block;
      background: #0894ec;
      vertical-align: center;
      margin-right: 5px;
    }
    .tree-icon i {
      display: block;
      color: #FFFFFF;
      height: 20px;  
      line-height: 20px;
      text-align: center;
    }
  </style>
</head>
<body>

<div class="page-group">
    <!-- 单个page ,第一个.page默认被展示-->
    <div class="page page-current">
        <!-- 这里是页面内容区 -->
        <h1 class="page-title page-title" style="background-color: #0894ec">学习资料</h1>
        <div class="content" style="background-color: #ffffff">
          <ul id="treeData">
          </ul>
        </div>
    </div>
</div>


<script type="text/javascript" src="js/zepto.min.js"></script>
<script type="text/javascript" src="js/common.js"></script>

<script type="text/javascript">
  var json = [
    {
      "name": "专科",
      "children": [
        {
          "name": "10.建设工程管理",
          "children": [
            {
              "name": "2412基础写作",
              "children": [
                {
                  "name": "2018012412.pdf",
                  "url": "http://www.baidu.com"
                },
                {
                  "name": "2018072412.pdf",
                  "url": "http://www.baidu.com"
                },
                {
                  "name": "2019012412.pdf",
                  "url": "http://www.baidu.com"
                },
                {
                  "name": "2019072412.pdf",
                  "url": "http://www.baidu.com"
                }
              ]
            }
          ]
        }
      ]
    }  
  ]

  $(function(){
    var list = parseJson(json,0);
    for(var i=0;i<list.length;i++){
      $('#treeData').append(list[i])
    }

    $('.tree-title').on('click', function(event){
      $(this).next().toggle();
      var icon = $(this).children('.tree-icon').children('i');
      if (icon.text()==='-'){
        icon.text('+');
      } else {
        icon.text('-');
      }
    });
  });

  function parseJson (data, level) {
    var lis  = [];
    var index = level + 1
    for(var i=0;i<data.length;i++){
      var item = data[i]
      var rootLi = $('<li></li>');
      rootLi.addClass('tree-item')
      if (item.children && item.children.length > 0) {
        var div = $('<div></div>')
        var icon = $('<span></span>')
        icon.addClass('tree-icon')
        icon.append($('<i></i>').text('-'))
        div.append(icon)
        var span = $('<span></span>');
        span.text(item.name);
        div.addClass('tree-title');
        div.css("padding-left", index+"9px");
        div.append(span)
        var ul = $('<ul></ul>');
        rootLi.append(div)
        var subLi = parseJson(item.children, index);
        for(var j = 0;j<subLi.length;j++) {
          ul.append(subLi[j])
        }
        rootLi.append(ul)
      } else {
        if (item.url) {
          var a = $('<a></a>');
          a.text(item.name);
          a.attr('href', item.url);
          a.attr('target',"_blank");
          a.addClass('item-content');
          a.css("padding-left", index+"9px");
          rootLi.append(a)
        } else {
          var span = $("<span></span");
          span.text(item.name);
          span.addClass('item-content');
          span.css("padding-left", index+"9px");
          rootLi.append(span);
        }
      }
      lis.push(rootLi)
    }
    return lis;
  };

</script>
</body>
</html>

有几个依赖js就不传了,其实只要jquery就行了,我只是偷懒拿旧页面改的,样式自己再调吧。

理论上可以支持多级的,我试了四级是没有问题的,代码写的有点烂,非专业前端,见谅!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值