zoukankan      html  css  js  c++  java
  • DOM

    DOM(document object model)文档对象模型

    文档:html页面

    文档对象:页面中的元素

    文档对象模型:定义--为了能够让程序(js)去操作页面中的元素

      元素.childNodes:只读 属性 子节点列表集合

        标准下:包含了文本和元素类型的节点,也会包含非法嵌套的子节点

        非标准下:只包含元素类型的节点,IE7以下,不会包含非法嵌套的子节点

        childNode只包含一级子节点,不包含后背孙级以下的节点

        <script>
            window.onload=function () {
                var oUl=document.getElementById("ul1");
                    alert(oUl.childNodes.length);
            }
        </script>
    
      <ul id="ul1">
          <li>1111</li>
          <li>2222</li>
          <li>3333</li>
          <li>4444</li>
      </ul>

    上面例子中,在标准情况下长度出现9的结果是因为把<li>前后的回车换行符是文本类型节点,所以会加上一共9个节点。在非标准情况下,例如在IE6,7,8下,结果为4,只包含元素类型节点。

       元素.nodeType:只读 属性 当前元素的节点类型

        DOM节点的类型有12种:9代表Document节点,1代表Element节点,3代表Text节点,8代表Comment节点,11代表DocumentFragment节点

      元素.attributes:属性 属性列表集合

      元素.children:只读 属性 子节点列表集合

        标准下:只包含元素类型的节点

        非标准下:只包含元素类型节点

      元素.firstChild:只读 属性 第一个子节点

        标准下:firstChild会包含文本类型的节点

        非标准下:只包含元素节点

        当要获取第一个元素类型节点,又可避免兼容性问题,可以使用---元素.children[0]来搭配获取。

      元素.firstElementChild:只读 属性

        标准下:获取第一个元素类型的子节点

        非标准下:不支持这个属性

        元素.lastElementChild||元素.lastChild 最后一个子节点

       元素.nextElementSibling||元素.nextSibling 下一个兄弟节点

       元素.previousElementSibling ||元素.previousSibling 上一个兄弟节点

      元素.parentNode:只读 属性 当前节点的父级节点

        无兼容性问题

      元素.offsetParent:只读 属性 离当前元素最近的有一个有定位属性的父节点 

        如果没有定位父级,默认值body

        IE7以下,如果当前元素没有定位默认是body,如果有定位则是html。如果当前元素的某个父级触发了layout,那么offsetParents就会指向到这个触发layout特性的父节点上

       元素.offsetLeft[Top]:只读 属性 当前元素到定位父级的距离(偏移值)

          到当前元素的offsetParent的距离

          如果没有定位父级:offsetParent->body     offsetLeft->html

          如果有定位父级 :    IE7以下:如果自己没有定位,那么offsetLeft[Top]是到body的距离 

                    其他:到定位父级距离


       DOM-如何获取某个元素到顶部的距离

      方法核心就是利用offsetparent 与offsetTop值的特性,都是取的是定位元素。offsetParent取的是离自己最近的定位父级,没有定位父级取body。同样offsetTop也是得到的是离自己最近的定位父级的距离,没有定位父级得到的是到body的距离。在ie7以下,两者也相同,offsetParent取的是html,offsetTop得到的是到html的距离。

    var iTop=0;
    var obj=该元素;
    while(obj){
       iTop+=obj.offsetTop;
       obj=obj.offsetParent;    
    }
    alert(iTop);//该元素到顶部的距离

    //body的offsetParent为null,html
    的offsetParent为null
    //body的offsetTop为0,html的offsetTop为0

     

    •   创建元素:document.createElement(标签名称);

       例: var createLi=document.createElement('li');

    •    添加到页面中:

        父级.appendChild()方法   追加子元素(在父级元素的最后一个子节点后面添加)

          例:oUl.appendChild(createLi);

        父级.insertBefore(新的元素,被插入的元素) 方法  在指定元素前面插入一个新元素,

        注意:

          在ie下如果第二个参数的节点不存在,会报错。

          在其他浏览器下如果第二个参数的节点不存在,则会以appendChild的形式进行添加。

          解决办法:

            if(父级.children[0]){

                       父级.insertBefore(新的元素,父级.children[0]);

            }else{

              父级.appendChild(新元素);

            }

             例:oUl.insertBefore(oLi,oUl.children[0]);//一直插入到第一位

    •    删除元素: 父级.removeChild(要删除的元素);  
    •     替换子节点:父级.replaceChild(新节点,被替换的节点);  类似于剪切元素,新节点在原来的位置上已经不存在,移动到替换的节点那里。

      appendChild,insertBefore,replaceChild都可以操作动态创建出来的元素节点,也可以操作已有元素节点

  • 相关阅读:
    zend guard 4/5 破解版和免过期办法,已补授权Key一枚,成功注册。
    一身冷汗,PHP应该禁用的函数
    CentOS 5.5 安装和卸载桌面
    php加速模块 eAccelerator open_basedir错误解决办法
    配置电信网通双线双IP的解决办法
    php安装igbinary模块
    ubuntu系统VNC服务器安装配置
    python3 之 闭包实例解析 Be
    python3 之 内置函数enumerate Be
    python3 之 匿名函数 Be
  • 原文地址:https://www.cnblogs.com/yuxingyoucan/p/5700387.html
Copyright © 2011-2022 走看看