DOM

<body>
        <pre>
            <div>
                DOM基本概念/*兼容性问题或者说是差异主要由于浏览器采用标准不同造成*/
                Document Object Model 文档对象模型
                文档:html页面
                文档对象:文档中的元素
                文档对象模型:定义 为了让程序(JS)能够去操作页面中的元素
                
                DOM将文档当作一个树状结构,并且定义了方法来操作页面中节点
                比如 documentElementById等是方法,可以设置的
                比如 document,document.body等是属性,只读的
                document
                html
                head      body
                        p     ul
                            li li...
                            
                DOM节点类型  共计12种
                元素.nodeType  只读属性 节点类型
                    元素节点 1
                    属性节点 2
                    文本节点 3
                元素.attributes  只读属性  节点属性列表
                    if( 元素.childNodes[i].nodeType == 1 ){
                        如果节点类型为1,即元素节点,就执行
                    }
                元素.childNodes 只读属性 子节点列表集合/*不推荐使用*/
                /*推荐使用children,标/非标只包含元素类型节点*/
                /*非法嵌套的解析不同依旧存在,主要因为浏览器标准造成*/
            </div>
            <div>
                firstChild 只读属性
                标准下:包含文本类型节点,firstChild  firstElementChild 均有
                非标准下:只包含元素节点,没有firseElementChild
                兼容
                var oFirst = firstElementChild||firstChild;
                /*但是,标准下初始时如果元素内没有子节点,依旧会报错*/
                推荐使用  元素.children[i]
                <div>
                    lastChild最后一个子节点
                    nextSibling下一个兄弟节点
                    previousSibling上一个兄弟节点
                </div>
            </div>
            <div>
                parentNode  当前节点的父节点  只读属性  /*无兼容问题*/
            </div>
            <div>
                offsetParent  当前元素最近的有定位的父节点
                            没有定位父级  默认为body/*无兼容问题*/
                        IE7以下
                            自身有定位时  默认为html或者触发了layout特性的父节点/*元素layout测试(.currentStyle.hasLayoyt;)*/
                            自身没有定位  默认为body
            </div>
            <div>
                元素.offsetTop[Left]:只读属性  当前元素到定位父级(offsetParent)的距离
            </div>
            <div>
                元素.style.width[height]; /*样式宽[高]*/
                元素.clientWidth[Height]; /*样式宽[高]+padding*/
                元素.offsetWidth[Height]; /*样式宽[高]+padding+border*/
        </pre>
        <!--此处截断pre标签,防止例子变形-->
        <!--并且证明offsetTop等属性的结果,会因为元素位置异常改变而改变-->
                <div id="box" style="width: 100px; height: 100px; padding: 10px; border: 10px solid #f60; overflow: hidden; margin-left: 200px;">
                    <div id="cont" style="width: 100px; height: 200px; background: #FFC200;"></div>
                </div>
        <pre>
                style="width: 100px; height: 100px; padding: 10px; border: 10px solid #f60; overflow: hidden;  margin-left: 150px;"
                style="width: 100px; height: 200px; background: #FFC200;"
                <div>
                    pos
                    while(obj){
                        pos += obj.offsetLeft[Top];/*包含元素边框*/
                        obj = obj.offsetParent;
                    }
                </div>
            </div>
            <div>
                <div>
                    元素属性(方法)
                </div>
                . & [];
                
                元素.getAttribute(属性名称); 方法  获取指定元素的指定属性值
                元素.setAttribute(属性名称); 方法  设置指定元素的指定属性值
                元素.removeAttribute(属性名称); 方法  删除指定元素的指定属性值
                比如:oCont.removeAttribute('id');
                此方法相比较于.和[],可操作自定义属性
                此方法相比较于.和[],src地址不会出现完整路径/*ie7依旧为完整路径*/
            </div>
            <div>
                元素创建(方法)
                <div>
                    父级.appendChild(要添加的元素);
                    父级.insertBefore(新的元素,被插入的子元素);
                        比如:oUl.insertBefore(oLi,oUl.children[i]);
                        问题:
                            在IE下,如果第二个参数的元素不存在会报错
                            标准下,如果第二个参数的元素不存在会以appendChild的形式插入
                        解决:
                            if( 被插入的子元素 ){
                                父级.insertBefore(新的元素,被插入的子元素);
                            }else{
                                父级.appendChild(要添加的元素);
                            }
                    需要删除元素的父级.removeChild( 需要删除的元素 );
                    被替换元素的父级replaceChild( 替换的新元素,被替换的元素 );
                </div>
            </div>
            <div>
                表格
                <div>
                    tHead         表格头
                    tBodies     表格正文
                    tFoot         表格尾
                        rows     表格行
                        cells     表格列
                    oTab.tBodies[i].rows[i].cells[i].innerHTML
                    <a href="04-DOM表格.html" target="_blank">表格实例</a>
                </div>
            </div>
            <div>
                表单
                <div>
                    读取
                        oForm[name][attributes];
                    onchange
                        oFrom[name].onchange = fn;
                        text:焦点移出后触发
                        radio/checkbox:
                             标准下:点击改变值触发
                              非标准下:焦点移开后触发
                        select:/*取值:oForm[name].value;*/
                            选中即触发
                            
                    事件
                        onsubmit  表单提交事件对应配合 type = 'submit' 标签使用
                            oForm.onsubmit = function (){
                                if( this[name][value...] == '' ){
                                    alert ('请输入内容');
                                    return false;
                                }
                            };
                            submit(); 提交表单方法,可以配合其他按钮或事件使用
                        onreset 表单重置
                            配合confirm使用
                            oFrom[name].onreset = function (){
                                return confirm('是否充值表单');
                            };
                </div>
            </div>
        </pre>
    </body>

 

posted @ 2016-05-26 16:37  河蟹彡  阅读(176)  评论(0编辑  收藏  举报