zoukankan      html  css  js  c++  java
  • JS框架设计读书笔记之-节点模块

    节点的创建

      浏览器提供了多种手段创建API,从流行程度依次是document.createElement、innerHTML、insertAdjacentHTML、createContextualFragment。

      document.createElement:传入一个标签名,返回此类型的元素节点。对于浏览器不支持的节点类型,也可以支持,后来被用于IE6-IE8支持H5新标签。  

    console.log(document.createElement('abc'));    //<abc></abc>

      

      innerHTML:创建效率至少比createElement快2-10倍,并且可以一次性大量生成节点,但是对于空白的处理有兼容问题;另外innerHTML不会执行script里面的脚本,jQuery直接用正则把内容抽出来使用全局eval执行了。最后一个问题是有些标签不能直接作为div的子标签,例如tr、td、th,框架用特殊标签包裹这些,结果后来发现浏览器会自动补全这些标签...

      insertAdjacentHTML:可以灵活的将节点插入任意位置,但是同样有标签包裹问题。

    节点的插入

      appendChild:参数类型确定,无重载。

    节点的复制

      cloneNode:IE会复制绑定的事件,由于引用不是来自框架,也无法解除,一般框架重写API,接受一个布尔参数决定是否复制事件。

    节点的删除

      removeNode:IE私有实现,将目标从文档树中删除,返回目标节点。接受一个参数,false时仅删除目标节点,保留子节点。

      removeChild:在老IE有内存泄露问题,因为在IE6-IE8中存在一个叫DOM超空间的概念,当元素移出DOM树,又有JS关联时,此元素不会消失,会被保存到一个叫超空间的地方。

        // EXT框架中针对IE6/IE7的重写
        var removeNode = IE6 || IE7 ? function() {
            var d;
            return function(node) {
                if (node && node.tagName != 'BODY') {
                    d = d || document.createElement('div');
                    d.appendChild(node);
                    d.innerHTML = '';
                }
            }
        }() : function(node) {
            //removeChild
        }

      

    老子要日穿V8引擎
  • 相关阅读:
    计算机网络(1)----概述
    博客园自定义样式
    linux进程
    接口回调解析
    优先级队列
    双栈实现队列
    递归解决反转链表的一部分
    Multisim 之逻辑转换仪
    Multisim 如何添加文本 如何编辑文本字体
    Multisim 中的一些快捷键
  • 原文地址:https://www.cnblogs.com/QH-Jimmy/p/6441245.html
Copyright © 2011-2022 走看看