zoukankan      html  css  js  c++  java
  • Jquery + dl 实现树

    dt dd 其实是个很好用的标签,以前还没怎么发现.

    说说这个例子里注意的地方:

    1. append 方法的 事件传递

    添加节点代码:

      function AddTreeNodeSecond() {
                $(".select").each(function (i) {
                    if (this.localName == "dd") {
                        var value = $(this).text();
                        $(this).empty();
                        $(this).removeClass("select");
                        $(this).append($("<dl></dl>").append($("<dt>dt</dt>").click(selectNode).add($("<dd>dd</dd>").click(selectNode))));
                    }
                    else if (this.localName == "dt") {
                        //$(this).after($("<dd id='" + index + "'>" + index + "</dd>").click(selectNode));
                        $(this).clone(false).after($("<dd id='" + index + "'>" + index + "</dd>"));
                    }
                });//end each
            }

    2.元素选择代码

      function selectNode(e) {
                if (e.target.localName != "dl") {
                    if ($(e.target).hasClass("select")) {
                        $(e.target).removeClass("select");
                    }
                    else {
                        $(e.target).addClass("select");
                    } 
                   //event 即为触发当前方法所包含的事件对象.
                    var e = (event) ? event : window.event;
                    if (window.event) {
                        e.cancelBubble = true;
                    } else {
                        e.stopPropagation();
                    }
                }
            }
    //绑定dt ,dd  的click事件
     $("dt,dd").click(selectNode);
    $("dt,dd").click(selectNode) //初始化时,绑定click事件到selectNode方法.
    之后选择添加子节点方法 AddTreeNodeSecond .使用append方法,将"<dl><dt></dt><dd></dd></dl>" 添加到 父级<dd></dd> 标签中.此时,使用append方法 会讲 父级的<dd></dd> 的click事件,传递给 刚添加的元素,造成 dl 也被绑定了.(注:这是我通过调试得出的结论,具体的理论依据并为找到.将会在稍后查找,并做补充)

    2.事件冒泡.一个比较重要的问题,建议在进行附在的元素操作时加上此句
                    var e = (event) ? event : window.event;
                    if (window.event) {
                        e.cancelBubble = true;//ie取消事件冒泡
                    } else {
                        e.stopPropagation();//其他浏览器
                    }
     
  • 相关阅读:
    虚方法的调用是怎么实现的(单继承VS多继承)
    C++ Data Member内存布局
    删除单链表,你会吗?
    最近面试遇到的Windows相关的题目
    C# 文章导航
    移动端开发文章导航
    Vue源码阅读(一) 准备工作
    vue-router源码阅读(一) 内部探究
    Vuex源码阅读(二) store内的getters实现逻辑
    Vuex源码阅读(一) new Vuex.Store()内部探究
  • 原文地址:https://www.cnblogs.com/blackcatpolice/p/3518153.html
Copyright © 2011-2022 走看看