jstree和dtree

jstree:https://www.jstree.com/docs/config/
dtree:http://www.destroydrop.com/javascripts/tree/

近期从框架转到用原生代码开发一个tree的查看工具,两个项目,需求不同,但是显示形式相同。
第一个项目选用jstree,其实在选择的时候也有考虑过dtree,因为数据的原因,改用jstree,jstree的功能网上查了一圈也是很强大了。

jstree:
引入:
使用:
在这里插入图片描述
dtree:
我觉得用法和功能要比jstree要强大 要好的多 也可能是因为在dtree上研究的时间比较长,花的精力较多。所有的核心都在dtree.js中,可以根据自己的需要进行代码修改。
1.引入:

<link rel="StyleSheet" href="../tree/cssnew/dtree.css" type="text/css" />
<script type="text/javascript" src="../tree/jsnew/dtree.js"></script>

2.使用:

var d = new dTree('d');
var dataList = []; // 这里是数据(我的这个数据是请求过来的)
for(var i = 0; i < dataList.length; i++) {
    d.add(
        dataList[i][0],  // 父ID
        dataList[i][1],  // 子ID
        dataList[i][2],	 // 名称
        dataList[i][4],  // url
        "",
        "myframe", // 这个参数是通过iframe窗口url打开,是iframe的标识
        '../tree/' + dataList[i][3], // 这个是图标
        '../tree/' + dataList[i][3], // 这个是文件打开的图标
        false
    );
}
document.getElementById("ulList").innerHTML = d.toString();

反正就是引入,使用,上手贼方便。

3.再说需求:

<frameset cols="22%,*">
  <frame src="menu.html" name="menu" id="menu" />
   <frame src="1.html" id="myframe" name="myframe" />
</frameset>

1.使用老掉牙frameset,因为是原始的项目的优化修改,说实话,我在接触这个项目之前都没听过… 然后就学习了一个这个frameset,貌似是已经被淘汰掉的了…
2.通过其中[myframe]的frame,上一页下一页翻页,当翻页的时候做[menu]dtree的展开高亮记录cookie。
这时,就要看dtree.js了:
1.节点高亮,记录cookie,dtree代码如下图
在[myframe]翻页等触发页面加载的位置,向[menu]回传参数id,

parent.document.getElementById('menu').contentWindow.menuReturn($("#pageNo").val());

在[menu]对应js
// menu的回显

function menuReturn(url) {
    var aList = $(".dTreeNode a"); // 获取所有的a标签
    for (let i = 0; i < aList.length; i++) {
        if($(aList[i]).attr("href") == (url + '.html')) {
            $(".leftCon").scrollTop(0);
            $(".leftCon").scrollTop($(aList[i]).offset().top - 300);
            // 打开当前页设置cookie及菜单高亮; -- 调用dtree方法
            d.s($(aList[i]).attr("id").split("sd")[1]);
            // 点击展开
            $(aList[i]).parents(".clip").attr('style', 'display:block');
            var imgArr = $(aList[i]).parents(".clip").prev().find("img");
            for (let i = 0; i < imgArr.length; i++) {    
                // 找到需要变为展开的img;            
                if ($(imgArr[i]).attr("src") == '../tree/imgtree/plusbottom.gif') {
                    // 展开方法; -- 调用dtree方法
                    d.o($(imgArr[i]).attr("id").split("jd")[1]);
                } else if (($(imgArr[i]).attr("src") == '../tree/imgtree/plus.gif')) {
                	// 展开方法; -- 调用dtree方法
                    d.o($(imgArr[i]).attr("id").split("jd")[1]);
                }
            }
        }
    }
}

图片为dtree点击节点的代码,图片中this.o(id)是另一个需求加上去的:点击节点展开,不要点击+/-才展开收起,然后就在这个位置加了这行~,这行加上去之后,在修改图片的位置可能会报错,元素找不到,需要判断一下
节点的点击事件,记录cookie

在这里插入图片描述
完美结束~~
我是真的学到了dtree!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
dtree是一个由JavaScript编写成的简单的树形菜单组件,目前免费并且开源。dtree   目前有很多的树形菜单组件(比如ext),dtree是一种简单易懂的js组件,不需要复杂的操作即可生产,同时支持动态从数据库引入数据。   dTree可以不用添加任何页面而直接用代码实现多个栏目,并可以实现无限分级,下面是官方介绍的优点:   - Unlimited number of levels(无限分级)   - Can be used with or without frames(可用于框架或非框架页面)   - Remembers the state of the tree between pages(在不同页面之间可记住当前状态)   - Possible to have as many trees as you like on a page(可以得到你想要数量的树型)   - All major browsers suported(支持的浏览器)   Internet Explorer 5+ Netscape 6+ Opera 7+ Mozilla   - Generates XHTML 1.0 strict validated output(严格支持XHTML 1.0)   - Alternative images for each node(每个节点用图片代替) [编辑本段]创建dtree   1)从官网上下载dtree的源文件压缩包“dtree.zip”,包内包含以下几个文件:   img文件夹: 包含树形菜单显示需要的图标   api.html : 作者写的dtree帮助文档   dtree.css: 树形菜单的样式   dtree.js : js核心文件,代码都在其中   example01.html:树形菜单实例   2)将压缩包内的文件拷贝到项目webroot下(example01.html可以不拷贝)   3)新建一个web文件(*.html、*.jsp...都可以),首先引入css和js文件:   <link rel="StyleSheet" href="dtree.css" type="text/css" />   <script type="text/javascript" src="dtree.js"></script>   然后在<body>里创建一个div层,指定class为“dtree”,此时该层就引用了dtree的样式   <div class="dtree">   <script type="text/javascript">   tree = new dTree('tree');   ......   </script>   </div>   注:具体代码可以参照example01.html   4)最后保存执行即可看到一个树形菜单。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值