ztree使用和数据生成 Map类型转数组 struct类型在js中的json形式 object页面显示 object的类型检测

下面代码是ztree的git仓库中3.5版本的noicon.html改造而来。编写了树状数据的生成代码。

数据支持各种类型的,其中在json中如果有json内有map结构,则字符串化时会产生空的{},目前采用的方案是正则替换为缩写,也可以再做递归检测,将map结构转为数组。

代码中含有的重要代码点:
Map类型转数组
struct类型在js中的json形式
object页面显示
object的类型检测

<!DOCTYPE html>
<html>
  <head>
    <title>ZTREE DEMO - noIcon</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" href="../../../css/demo.css" type="text/css" />
    <link
      rel="stylesheet"
      href="../../../css/zTreeStyle/zTreeStyle.css"
      type="text/css"
    />
    <script
      type="text/javascript"
      src="../../../js/jquery-1.4.4.min.js"
    ></script>
    <script
      type="text/javascript"
      src="../../../js/jquery.ztree.core.js"
    ></script>
    <!--  <script type="text/javascript" src="../../../js/jquery.ztree.excheck.js"></script>
	  <script type="text/javascript" src="../../../js/jquery.ztree.exedit.js"></script>-->
    <script type="text/javascript">
      var setting = {
        view: {
          showIcon: false,
        },
        data: {
          simpleData: {
            enable: true,
          },
        },
      };

      var liMapData = new Map();
      liMapData.set("key", "value");
      liMapData.set("key1", "value1");
			liMapData.set("key2", "value2");
			var kvArray = [
        ["key1", "value1"],
        [
          "key2",
          [
            ["key1", "value1"],
            ["key2", "value2"],
          ],
        ],
      ];
      var liArrayData = ["2", "3", 4, [2, 3, [3, 5, [5]]]];
      var liArrayData2 = ["2", "3", 4, [2, 3, [3, 5, [5]]], liMapData];
      var liJsonData = {
        // a: 9,
        // d: 9,
        // c: 9,
        b: { a: 9, d: 9, c: 9 ,f:liArrayData2},
        e: [1, 2, 3,liArrayData2],
        f: liMapData,
				e: liArrayData,
				k:kvArray
      };
      
      function treeDataCreate(preData, parentId) {
        var liData = preData;
        var pId = parentId;
        var treeData = [];
        var checkType = Object.prototype.toString.call(liData);
        switch (checkType) {
          case "[object Object]":
            for (var i = 0; i < Object.keys(liData).length; i++) {
              if (
                Object.prototype.toString.call(
                  liData[Object.keys(liData)[i]]
                ) == "[object Map]"
              ) {
								
                var single = {
                  id: parentId * 10 + i + 1,
                  pId: parentId,
                  name: Object.keys(liData)[i]+":"+JSON.stringify(
                    Array.from(liData[Object.keys(liData)[i]])
                  ),
								};
								
              } else if (
                Object.prototype.toString.call(
                  liData[Object.keys(liData)[i]]
                ) == "[object Array]"
              ) {
                var single = {
                  id: parentId * 10 + i + 1,
                  pId: parentId,
                  name: Object.keys(liData)[i]+":"+JSON.stringify(liData[Object.keys(liData)[i]]).replace(/{}/,"{...}"),
                };
              } else {
                var single = {
                  id: parentId * 10 + i + 1,
                  pId: parentId,
                  name: Object.keys(liData)[i]+":"+JSON.stringify(liData[Object.keys(liData)[i]]).replace(/{}/,"{...}"),
                };
              }

              // debugger;
              treeData.push(single);
              if (typeof liData[Object.keys(liData)[i]] == "object") {
                console.log(liData[Object.keys(liData)[i]], "***");
                treeData = treeData.concat(
                  treeDataCreate(
                    liData[Object.keys(liData)[i]],
                    parentId * 10 + i + 1
                  )
                );
              }
            }

            break;
          case "[object Map]":
            var i = 0;
            liData.forEach(function (value, key) {
              if (Object.prototype.toString.call(liData[i]) == "[object Map]") {
                // var single = {
                //   id: parentId * 10 + i + 1,
                //   pId: parentId,
                //   name: JSON.stringify(Array.from(liData[i])),
                // };
                var single = {
                  id: parentId * 10 + i + 1,
                  pId: parentId,
                  name: key + ":" + JSON.stringify(Array.from(value)),
                };
              } else {
                var single = {
                  id: parentId * 10 + i + 1,
                  pId: parentId,
                  name: key + ":" + JSON.stringify(value),
                };
              }
              treeData.push(single);
              if (typeof value == "object") {
                console.log(value, "***");
                treeData = treeData.concat(
                  treeDataCreate(value, parentId * 10 + i + 1)
                );
              }
            }, liData);

            break;
          case "[object Array]":
            for (var i = 0; i < liData.length; i++) {
              if (Object.prototype.toString.call(liData[i]) == "[object Map]") {
                var single = {
                  id: parentId * 10 + i + 1,
                  pId: parentId,
                  name: JSON.stringify(Array.from(liData[i])),
                };
              } else {
                var single = {
                  id: parentId * 10 + i + 1,
                  pId: parentId,
                  name: JSON.stringify(liData[i]),
                };
              }

              // debugger;
              treeData.push(single);
              if (typeof liData[i] == "object") {
                console.log(liData[i], "***");
                treeData = treeData.concat(
                  treeDataCreate(liData[i], parentId * 10 + i + 1)
                );
              }
            }

            console.log(treeData, "treeData");
            break;
          default:
            treeData.push([{id: 1, pId: 0, name: liData}]);
            console.log(treeData, "treeData");
        }
        console.log(treeData, "treeData");
        return treeData;
      }
      // var treeData = treeDataCreate(liArrayData, 0);
      // var treeData = treeDataCreate(liMapData, 0);
      // var treeData = treeDataCreate(kvArray, 0);
      var treeData = treeDataCreate(liJsonData, 0);

      // var treeData ;
      console.log(treeData, "treeData");
      var zNodes = [
        { id: 1, pId: 0, name: 22 },
        { id: 11, pId: 1, name: 33 },
        { id: 111, pId: 11, name: [1, 2, 3] },
        { id: 112, pId: 11, name: "叶子节点112" },
        { id: 113, pId: 11, name: { 1: 2, 2: 2 } },
        { id: 114, pId: 11, name: "叶子节点114" },
        { id: 12, pId: 1, name: "父节点12 - 折叠" },
        { id: 121, pId: 12, name: "叶子节点121" },
        { id: 122, pId: 12, name: "叶子节点122" },
        { id: 123, pId: 12, name: "叶子节点123" },
        { id: 124, pId: 12, name: "叶子节点124" },
        { id: 13, pId: 1, name: "父节点13 - 没有子节点" },
        { id: 2, pId: 0, name: "父节点2 - 折叠" },
        { id: 21, pId: 2, name: "父节点21 - 展开" },
        { id: 211, pId: 21, name: "叶子节点211" },
        { id: 212, pId: 21, name: "叶子节点212" },
        { id: 213, pId: 21, name: "叶子节点213" },
        { id: 214, pId: 21, name: "叶子节点214" },
        { id: 22, pId: 2, name: "父节点22 - 折叠" },
        { id: 221, pId: 22, name: "叶子节点221" },
        { id: 222, pId: 22, name: "叶子节点222" },
        { id: 223, pId: 22, name: "叶子节点223" },
        { id: 224, pId: 22, name: "叶子节点224" },
        { id: 23, pId: 2, name: "父节点23 - 折叠" },
        { id: 231, pId: 23, name: "叶子节点231" },
        { id: 232, pId: 23, name: "叶子节点232" },
        { id: 233, pId: 23, name: "叶子节点233" },
        { id: 234, pId: 23, name: "叶子节点234" },
        { id: 3, pId: 0, name: "父节点3 - 没有子节点" },
      ];

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

  <body>
    <div class="content_wrap">
      <div id="treeDemoClose"><button>关闭</button></div>
      <div>
        <ul id="treeDemo" class="ztree" style="width:500px"></ul>
      </div>
    </div>
  </body>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值