美文网首页前端
原生JavaScript学习笔记之——DOM

原生JavaScript学习笔记之——DOM

作者: 108N8 | 来源:发表于2017-06-02 11:33 被阅读320次
    全称:Document Object Model 文档对象模型
    DOM会把文档看做是一个树状结构,同时定义了很多方法,来操作这个树
    每一个标签都是一个节点(标签 即 元素 即 节点)
    **不仅仅只有标签才算节点,也有文本节点
        text文本节点   =>   空格 换行 回车
    已知一个节点,能找到任何一个节点
        oUl.nodeType  =>   object   
    

    一、节点查找操作(类似CSS选择器)

    1、元素.nodeType;   
            只读属性   当前节点类型
            DOM节点类型有多种  12种(W3C)定义
                元素.nodeType;
                    1) 元素节点  <==>   1  
                    2) 属性节点  <==>   2
                    3) 文本节点  <==>   3
    2、元素.Attributes;   
            只读属性        属性列表集合
    3、元素.childNodes;  
            只读属性
            子节点列表集合(只包含以及子节点,不包含后辈孙级以下节点)
                标准下:   包含了文本和元素类型的节点,也会包换非法嵌套的子节点
                非标准下: 只包含元素类型节点,IE7下不会包含非法嵌套子节点
            oUl.childNodes.length
                是一个类数组对象,当只有一个子节点,其length = undefined,当子节点大于1时,其长度有数值
    4、父级.children;  
            只读属性 子节点列表集合 
            只能获取儿子级节点,不能获取孙子级节点 
            标准下:   只包含元素类型节点
            非标准下: 只包含元素类型节点
    5、 元素.firstChild;
            只读属性   元素下的第一个子节点(首节点)
            标准下:   firstChild会包含文本类型节点
            非标准下: 只包含元素节点
            元素.firstElementChild;  只读属性  标准浏览器下获取第一个元素类型节点(非标准下不识别会弹出undefined)
            兼容处理:
                var first=obj.firstElementChild || obj.firstChild;
            没有子级点bug
    6、 元素.lastChild;  
            最后一个子节点(尾节点)    
            var last=obj.lastElementChild || obj.lastChild;
    7、 兄弟节点
            下一个兄弟节点
                obj.nextSibling;    
                    1)在chorme FF ie9+ 下获取的是元素节点+文本节点(text)
                    2)在IE8  IE7 下只获取元素节点
                obj.nextElementSibling
                    1)在chrome FF ie9+ 下只获取元素节点
                    2)在IE8  IE7 下 undefined
                    3)当没有下一个"元素"兄弟节点,会找文本节点,若没有文本节点则会是null(但不会报错)
                做兼容:
                    var next=obj.nextElementSibling || obj.nextSibling;
            上一个兄弟节点
                var prev=obj.previousElementSibling || obj.previousSibling;     
    8、元素.parentNode;  
            只读属性  当前节点的父级节点(亲生父亲)
            只能获取父级节点,不能获取爷爷级节点,且只有一个父级节点
    9、元素.offsetParent;
            只读属性  距离当前元素最近的一个有定位属性的父节点(找干爹)
            a. 若没有定位父级,默认是body
            b. IE7以下,当前元素没有定位,offsetParent默认是body,若有定位则是html
            c. IE7以下,如果当前元素的某个父级触发了layout,那么offsetParent就会被指向到这个触发了layout特性的父节点上
                01、zoom:1;   触发layout
                02、document.getELementById('div1').currentStyle.haslayout;  =>  true:触发; false:未触发
    

    二、节点增删改操作

    1、document.createElement('标签名');
            动态创建元素
            document.createElement('li');
    2、 把创建的元素添加到页面中
            1) 父级.appendChild(要添加的元素);
                    方法  追加子元素(在后面添加)
                    oUl.appendChild(oLi);
            2) 父级.insertBefore(添加的元素,添加的位置);
                    方法  在指定元素前面插入一个新元素
            注意:
                1. 在IE下如果第二个参数的节点,不存在会报错
                2. 在其他浏览器下,如果第二个参数的节点不存在,则会以appendChild形式进行添加
        **appendChild insertBefore类似于剪切
    3、 父级.removeChild(要删除的元素);
            删除元素
            oUl.removeChild(this.parentNode);
    4、 父级.replaceChild(新节点,被替换的节点);
            替换元素
            document.replaceChild(oDiv,oP);
    注意:
        appendChild , insertBefore , replaceChild , 都可以操作动态创建出来的节点,也可操作已有节点 
    上移下移
        1)上移 添加到上一个的前面
        2)下移 添加到下一个的下一个的前面  
    

    三、元素的属性操作(Attribute)

    1、元素.getAttribute(属性名称);              方法   获取指定元素指定属性
        oTxt.getAttributes('value');
    2、元素.setAttribute(属性名称,属性值);        方法   给指定元素指定属性设值
        oTxt.setAttribute('value','hello');
    3、元素.removeAttribute(属性名称);            方法   移除指定元素指定属性
        oTxt.removeAttribute('value');
    注意:
        1.用‘.’和‘[]’的形式无法操作元素的自定义属性,getAttribute可操作元素的自定义属性
        2.可以获取元素属性实际的值,IE7以下还是会返回资源的绝对路径
    

    四、窗口的尺寸和大小

    可视区尺寸
        document.documentElement.clientWidth;
        document.document.Element.clientHeight;
    滚动距离
        document.body.scrollTop
        document.body.scrollLeft        
            Chrome 认为滚动条(scroll)是body的
            FF、IE都不好使
    
        document.documentElement.scrollTop;
        document.documentElement.scrollLeft;
        兼容
            var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    内容高度
        例:瀑布流中UL的高度
        document.body.scrollHeight;
    文档高度:
        document.body.offsetHeight;
    
        document.documentElement.offsetHeight;    =>    IE为可视高
    物体高度
        1) getStyle(obj,name);
            a. 高度    生效后的高度
            b. 类型  字符串
            c. display:none;     后依然是生效后的高度
        2) obj.offsetHeight;
            a.  高度   盒子模型的高度
            b.  类型   number
            c.  display:none;    后显示为0
    

    五、元素的距离

    1、元素.offsetLeft;     只读属性   当前元素到定位父级的距离(偏移值),到当前 元素.offsetParent的距离
       元素.offsetTop;
       没有定位父级
            offsetParent      =>     body/IE7  ->  html
            offsetLeft        =>     html(margin)
        有定位父级
            IE以下
                如果自己没定位: offsetTOP[Left]    ->   到body距离
                如果自己有定位: 那么就是到定位父级的距离
            其他
                到定位父级的距离
    2、区别
        style.width:   样式宽(100px,有单位)
        clientWidth:   可视区宽(样式宽+padding   没单位)
        offsetWidth:   占位宽(样式宽+padding+border   可视区宽+边框)

    相关文章

      网友评论

        本文标题:原生JavaScript学习笔记之——DOM

        本文链接:https://www.haomeiwen.com/subject/kfzyfxtx.html