• 05.DOM


    DOM基础
    什么是DOM 标签元素节点
    浏览器支持情况  火狐支持最好 谷歌其次 ie最差 尤其是ie6-8
    DOM节点
    节点分为:元素节点和文本节点 测试节点的类型用nodeType
    nodeType 为3时是文本节点
    nodeType 为1时是元素节点
    childNodes 节点 不兼容要做判断 一般用children

    children子节点只算第一层

    parentNode父节点

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    <script>
    window.onload=function ()
    {
        var aA=document.getElementsByTagName('a');
        
        for(var i=0;i<aA.length;i++)
        {
            aA[i].onclick=function ()
            {
                this.parentNode.style.display='none';
            };
        }
    };
    </script>
    </head>
    
    <body>
    <ul id="ul1">
        <li>dfasdf <a href="javascript:;">隐藏</a></li>
        <li>45346 <a href="javascript:;">隐藏</a></li>
        <li>fghfgcvn <a href="javascript:;">隐藏</a></li>
        <li>vcbxcvbc <a href="javascript:;">隐藏</a></li>
        <li>757465867 <a href="javascript:;">隐藏</a></li>
    </ul>
    </body>
    </html>
    View Code

    offsetParent
    获取对应定位的父元素

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    <style>
    #div1 {width:200px; height:200px; background:#CCC; margin:100px; }
    #div2 {width:100px; height:100px; background:red; position:absolute; left:50px; top:50px;}
    </style>
    <script>
    window.onload=function ()
    {
        var oDiv2=document.getElementById('div2');
        
        alert(oDiv2.offsetParent);//弹出的是object HTMLBodyElement 因为div1没有设置相对定位,所以div2是相对body定位的
    };
    </script>
    </head>
    
    <body>
    <div id="div1">
        <div id="div2"></div>
    </div>
    </body>
    </html>
    View Code

    首尾子节点  有兼容性问题
    firstChild、firstElementChild
    lastChild 、lastElementChild
    兄弟节点    有兼容性问题
    nextSibling、nextElementSibling
    previousSibling、previousElementSibling

    <script>
    window.onload=function ()
    {
        var oUl=document.getElementById('ul1');
        
        //IE6-8
        //oUl.firstChild.style.background='red';
        
        //高级浏览器
        //oUl.firstElementChild.style.background='red';
        
        if(oUl.firstElementChild)
        {
            oUl.firstElementChild.style.background='red';
        }
        else
        {
            oUl.firstChild.style.background='red';
        }
    };
    </script>
    <ul id="ul1">
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>

    元素属性操作
    第一种:oDiv.style.display=“block”;
    第二种:oDiv.style[“display”]=“block”;
    第三种:Dom方式

    DOM方式操作元素属性
    获取:getAttribute(名称)
    设置:setAttribute(名称, 值)
    删除:removeAttribute(名称)

    <script>
    window.onload=function ()
    {
        var oTxt=document.getElementById('txt1');
        var oBtn=document.getElementById('btn1');    
        oBtn.onclick=function ()
        {
            //oTxt.value='123';
            //oTxt['value']='123';        
            oTxt.setAttribute('value', '123');
        };
    };
    </script>
    <input id="txt1" type="text" />
    <input id="btn1" type="button" value="按钮" />

    用className选择元素
    如何用className选择元素
    选出所有元素
    通过className条件筛选
    封装成函数

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    <script>
    function getByClass(oParent, sClass)
    {
        var aResult=[];
        var aEle=oParent.getElementsByTagName('*');
        
        for(var i=0;i<aEle.length;i++)
        {
            if(aEle[i].className==sClass)//找到所有要找的class
            {
                aResult.push(aEle[i]);//放进数组里
            }
        }
        
        return aResult;
    }
    
    window.onload=function ()
    {
        var oUl=document.getElementById('ul1');
        var aBox=getByClass(oUl, 'box');
        
        for(var i=0;i<aBox.length;i++)
        {
            aBox[i].style.background='red';
        }
    };
    </script>
    </head>
    
    <body>
    <ul id="ul1">
        <li class="box"></li>
        <li class="box"></li>
        <li></li>
        <li></li>
        <li></li>
        <li class="box"></li>
        <li></li>
    </ul>
    </body>
    </html>
    View Code

     创建、插入和删除元素

    createElement(标签名) 创建一个节点
    appendChild(节点) 追加一个节点

    插入元素 insertBefore(节点, 原有节点) 在已有元素前插入
    例子:倒序插入li
    删除DOM元素
    removeChild(节点) 删除一个节点 例子:删除li

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    <script>
    window.onload=function ()
    {
        var aA=document.getElementsByTagName('a');
        var oUl=document.getElementById('ul1');
        
        for(var i=0;i<aA.length;i++)
        {
            aA[i].onclick=function ()
            {
                oUl.removeChild(this.parentNode);
            };
        }
    };
    </script>
    </head>
    
    <body>
    <ul id="ul1">
        <li>asfasd <a href="javascript:;">删除</a></li>
        <li>5645 <a href="javascript:;">删除</a></li>
        <li>ghdfjgj <a href="javascript:;">删除</a></li>
        <li>mvbnmvnb <a href="javascript:;">删除</a></li>
    </ul>
    </body>
    </html>
    View Code

     串联例子

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    <script>
    window.onload=function ()
    {
        var oBtn=document.getElementById('btn1');
        var oUl=document.getElementById('ul1');
        var oTxt=document.getElementById('txt1');
        
        oBtn.onclick=function ()
        {
            var oLi=document.createElement('li');//创建li
            var aLi=oUl.getElementsByTagName('li');
            
            oLi.innerHTML=oTxt.value;
            
            //父级.appendChild(子节点);
            //oUl.appendChild(oLi);
            if(aLi.length>0)//判断存不存在第一个节点
            {
                oUl.insertBefore(oLi, aLi[0]);//存在插入之前元素的 前面
            }
            else
            {
                oUl.appendChild(oLi);//不存在直接插入父元素
            }
        };
    };
    </script>
    </head>
    
    <body>
    <input id="txt1" type="text"/>
    <input id="btn1" type="button" value="创建li"/>
    <ul id="ul1">
    </ul>
    </body>
    </html>
    View Code

    文档碎片 文档碎片可以提高DOM操作性能(理论上) 文档碎片原理 document.createDocumentFragment()

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    <script>
    window.onload=function ()
    {
        var oUl=document.getElementById('ul1');
        var oFrag=document.createDocumentFragment();
        
        for(var i=0;i<10000;i++)
        {
            var oLi=document.createElement('li');
            
            oFrag.appendChild(oLi);
        }
        
        oUl.appendChild(oFrag);
    };
    </script>
    </head>
    
    <body>
    <ul id="ul1">
    </ul>
    </body>
    </html>
    View Code



     




  • 相关阅读:
    ArcEngine实现对点、线、面的闪烁(转载)
    好久没写博客了.把这几个月的开发过程做一个总结
    利用暴力反编译的程序处理ArcXML数据遇到的问题小结(纯粹研究目的)
    ArcSde 9.2与Oracle 10g是最佳搭档
    当ArcEngine报事件同时存在于AxMapControl,MapControl时的解决方法(转载)
    写在苏州火炬接力的最后一站
    提问,如何才能触发鼠标事件
    地铁线路图高性能查找算法系统,最短路径查询地铁网络拓扑高效率算法原创附带demo
    二分查找
    .net面试题
  • 原文地址:https://www.cnblogs.com/Xuman0927/p/6027420.html
Copyright © 2020-2023  润新知