zoukankan      html  css  js  c++  java
  • DOM

    DOM:Document Object Model    文档对象模型【当前HTML】
         BOM操作不够实现页面的动态交互效果,操作html才是核心。
         DOM提供了用程序动态控制html接口,描绘了一个层次化的节点树。
         便于开发人员添加,移除,修改页面。DOM处于javascript的核心地位上
     
    DOM等级分三类
         1.定义CORE核心文档规范
         2.定义XML文档规范
         3.定义HTML文档规范
     
    一、document属性:ws不自动提示这些单词【方法加执行符,属性直接点.】
         body:返回body元素
         URL:返回当前文档完整的url地址
         lastModified:返回文档最后一次修改的日期和时间
         charset:返回编码字符
         images:返回页面中所有的image的引用
         scripts:返回页面中所有脚本的集合
         title:返回当前文档的标题啊,同时也可以修改标题
         
    五个节点:HTML结构中每一个元素都是节点
         加载html页面时,web浏览器生成一个树形结构,用来表示页面内部结构。     
         html是树形结构,DOM将这种树形结构理解为由节点组成,就是节点树。
              文档本身是文档节点
              所有html元素,标签是元素节点
              所有html属性是属性节点
              html元素内的文本是文本节点
              注释是注释节点
     
    二、document方法-获取节点元素:
                 (1)getElementById("id属性值")   by:按照
                     按照id属性值获取元素对象,返回单个对象
                     注意:若有相同的id属性值,以第一个为准
                 (2)getElementsByName("name属性值");
                     按照name属性值获取元素对象,返回对象数组
                 (3)getElementsByTagName("标签名/元素名称");
                     按照标签名获取元素对象,返回对象数组
                 (4)getElementsByClassName("class属性值");
                     按照class的属性值获取元素对象,返回对象数组
     
                 javascript:void(0);伪协议,表示不执行跳转而去执行指定的事件处理函数
     
         <input type="checkbox" name="hobby" value="游泳" />游泳
         按照name获取元素
         var ho= document.getElementsByName("hobby");
         for(var i=0; i<=ho.length-1; i++) {
                    console.log(ho[i].value);
                }
     
         注意:
         在进行dom操作时,需要等html全部加载完毕后再进行操作,两种方式
                        (1)可以将script标签放在html代码下面
                            可以放在body的最后或body下
                        (2)可以利用onload事件
                            1)可以给body标签添加onload事件函数:<body onload="init();">
                            function init(){
                                 var btn=document.getElementById("btn");
                                 btn.onclick=function(){
                                 alert("你好");
                            2)写在style下面在js中编写:
                                window.onload = function () {
                                    //js代码
                                     window.onscroll=function(){}
                                }
     
    三、document方法2-创建元素,貌似只能在控制台查看。。。
         createElement:创建标签,可以指定任何标签
         createTextNode:创建文本节点
         createAttribute:创建属性节点
         createComment:创建一个注释
     
    创建图片对象
          var img=new Image() ,通过new 的方式创建一个图片对象
          img.src=''; 指定src路径  
          document.body.appendChild(img); 把图片放入页面中 appendChild 
     

     
     
    一、操作属性/操作元素属性的方法:
         attributes: 返回一个元素的属性数组/对象
         setAttribute():设置或者改变指定属性并指定值
             (改变或增加属性) 第一个参数:属性; 第二个参数:属性名称
              d.setAttribute('id','test1');//改变id为test1
         hasAttribute(): 如果元素中存在指定的属性,返回true,否则false ; 一个参数
         hasAttributes(): 如果元素有任何属性返回true,否则返回false ;  无需传参
     
    二、操作样式  
         d.classList: 返回class的类名,以数组形式
              ["cont", "bg", "btn", value: "cont bg btn"]
         d.className: 返回类名的数组形式!因为class是保留字,不能直接使用
         d.style: 返回行间定义的样式
              style只能获取在行间设置的样式,不能获取外部引用的样式
         如何获取行间样式的值?对象.属性 可以取值,也可以赋值,还可以增加属性
              d.style.font-size 会报错 ——>d.style['font-size'] | fontSize
              d.style.textAlign = 'center';
         
         获取元素实际的css样式值
        function getStyle(ele) {
            var style = null;
            if (window.getComputedStyle) {//在谷歌/火狐等现代浏览器使用
                style = window.getComputedStyle(ele, null);
            } else {//IE用这个属性
                style = ele.currentStyle;
            }
            return style;
        }
        console.log(getStyle(d).fontSize);//24px
               

     
     
    一、节点标签:基本属性
         nodeType 节点类型;返回节点类型的常数,1-12种类型的常数值
         nodeValue 节点的值
         nodeName 节点的名字
         
         Node类型    Named Constant    说明<br>
        * 1    ELEMENT_NODE    元素节点<br>
        * 2    ATTRIBUTE_NODE    属性节点<br>
        * 3    TEXT_NODE    文本节点<br>  
        * 9    DOCUMENT_NODE    文档节点<br>
       
         <div id='test'>div</div>
         d.attributes   获取所有属性
         d.attributes.id.nodeValue   //test
         d.attributes.id.nodeType   //2
     
    二、获取节点  的属性
          ownerDocument: 返回顶层文档,#document  owner:所有者
          parentNode: 返回父节点
          childNodes: 返回子节点,包含文本节点,空格也是一个文本节点 
          firstChild: 第一个子节点 //#text 空格
          lastChild: 最后一个子节点
          firstElementChild: 第一个子元素
          lastElementChild: 最后一个子元素
          previousSibling: 前面的一个同级节点  previous:前一个 sibling:兄弟
          nextSibling: 后面的一个同级节点
          previousElementSibling: 前面的一个同级元素,没有返回null
          nextElementSibling: 后面的一个同级元素,没有返回null
     
    三、操作节点  节点的方法
         cloneNode():复制节点
              浅复制:不传参数或者传入false,只会复制元素本身
              深复制:传入参数true,把元素本身及其子元素都复制出来
         appendChild():添加子元素,子元素成为了父元素的最后一个子节点【对象】
              var div=document.createElement('div')
              d.appendChild(div)
     
         insertBefore(): 把元素插入到指定元素之前,(新节点,指定位置)
             创建一个节点
             var span = document.createElement('span');
             var a = document.getElementById('a');
             d.insertBefore(span,a);//第一个参数新元素,第二个参数是位置
     
         removeChild( 需要被移除的元素 ): 返回值是被移动的节点
         replaceChild( 新节点,需要被替换的元素 ) :返回值是被替换的元素
     
    四、检测节点:
         hasChildNodes():检测元素是否有子节点,如果有子节点返回true,无false
              注意:文本注释都可以被检测到
         contains(): 检测某个节点是否是另外一个节点的子节点(子孙元素也可以检测)contains:包含
              用法:父元素.contains(子元素);返回值为true和false
              注意:检测自身返回的也是true
         isEqualNode(): 检测2个节点是否一样(必须是一模一样)
              用法: 元素1.isEqualNode(元素2),返回值为true和false
              var span01 = spans[0];
     

    一、文本操作
         innerText: 返回内部文本,不返回内部的标签结构,不解析标签!!!
         innerHTML: 返回内部的HTML结构!(使用频率非常高!!!)【字符串】
    使用:1.控制台打印:innerText只有文本内容   innerHTML返回内部结构
          2.向页面中增加标签,会覆盖原有的文本【页面时间刷新】
            p.innerHTML = '<h3>梅雨季节大上海!!!</h3>'+'<h1>SHSXT!!</h1>';
     
    了解:元素大小和偏移量: ——>属性   【贪吃蛇】
         offsetHeight:返回元素的高度包括边框和填充
         offsetWidth:返回元素的宽度包括边框和填充
         offsetLeft:返回当前元素的相对水平偏移位置
         offsetTop:返回当前元素的相对垂直偏移位置
         offsetParent:返回元素的偏移容器
     
    length属性,可以使用length进行遍历
        var items = document.getElementsByClassName('item');
        console.log(items.length);//
        for (var i = 0; i < items.length; i++) {
            var obj = items[i];
            console.log(obj);
        }
     
    链式操作:就是 :方法.方法.方法.方法.方法.方法...
        在js中,只有返回节点集合的情况下才可以使用链式调用。(这里只是说在DOM操作范围)
        var cont = document.getElementById('cont');
        var divs = document.getElementById('cont')
                .getElementsByTagName('div')[0]
                .getElementsByTagName('span');
        console.log(divs); //span
     
    window 指窗体。document指页面。document是window的一个子对象。


     
    操作节点:
         cloneNode():复制节点
              浅复制:不传参数或者传入false时,只会复制元素本身
              深复制:传入参数true,把元素本身及其子元素都复制出来
                   只是复制下来,原DOM结构不会发生改变
         appendChild():增加子元素
              子元素成为父元素的最后一个子节点
              
     
    新增元素节点
                     1.write()
                         将任意的字符串插入到文档中
                     2.createElement();
                         创建一个元素节点
                         参数:传入标签名称
                         返回值:返回创建的元素对象
                     3.createTextNode()
                         创建一个文本节点
                     4.appendChild()
                         向元素中添加新的子节点,作为最后一个子节点
                     5.insertBefore()
                         向指定的已有的节点之前插入新的节点
     
                 setAttribute()
                     第一个参数:要设置的属性
                     第二个参数:属性值
                 步骤:
                     1.获取元素要添加的位置
                     2.创建要添加的元素
                     3.若要设置元素的属性,通过元素对象操作属性即可
                         元素对象.属性名/元素对象.setAttribute("属性名","属性值")
                     4.将新元素添加到要添加的位置上
     
                创建option标签的方式
                    1.通过createElement()方法创建
                    2.new Option(text值,value值);
     
              //添加p元素
            function addP() {
                //获取p元素要插入的位置
                var container = document.getElementById("container");
     
                /*第一种方式*/
                1.创建一个p元素
                var p = document.createElement("p");
                2.创建一个文本节点
                var txt = document.createTextNode("这是一个新增的p标签");
                3.将文本节点追加到p元素中
                p.appendChild(txt);
                4.将p元素追加到div中
                container.appendChild(p);
                */
     
                /*第二种方式*/
                /*
                1.创建一个p元素
                var p = document.createElement("p");
                2.向p元素添加文本
                p.innerHTML = "这是一个新增的p标签";
                3.将p元素追加到div中
                container.appendChild(p);
                */
     
                /*第三种方式*/
                //innerHTML在赋值时新的内容覆盖原有内容,若要保留原有内容,拼接上原有内容
                container.innerHTML += "<p>这是一个新增的p标签</p>";
            }
     
    插入文本节点
         insertBefore(newItem,exsitingItem)
                         向指定的已有的节点之前插入新的节点
                         newItem:要插入的节点
                         exsitingItem:参考节点
                         格式:
                             exsitingItem.parentNode.insertBefore(newItem,exsitingItem)
                             首先通过参考节点获取父节点,然后根据参考节点向父节点中插入新元素
                             exsitingItem.parentNode.insertBefore(newItem,null)
                                 相当于
                             exsitingItem.parentNode.appendChild()
     
                 parentNode:可以获取某个元素的父节点
                 nextSibling:获取当前元素的下一个同胞
     
         function insert () {
                //1.获取参考节点
                var span = document.getElementById("span1");
                //2.创建一个新节点
                var p = document.createElement("p");
                p.innerHTML = "新节点";
                //3.向参考元素的父节点中插入内容,插入的位置是在参考节点之前
                //span.parentNode.insertBefore(p,span);   
                //span.parentNode.insertBefore(p,null);   
                span.parentNode.insertBefore(p,span.nextSibling);
            }
     
    修改元素节点
                 replaceChild(newNode,oldNode)
                     用新的节点替换旧的节点
                     newNode:新的节点
                     oldNode:要被替换掉的节点
                     格式:
                         oldNode.parentNode.replaceChild(newNode,oldNode)
                         首先通过旧节点定位到父节点,然后用新的节点替换旧节点
                 cloneNode()
                     复制节点
                     var 复制好的节点 = 被复制的节点.cloneNode([true/false]);
                         true:深度克隆,可以克隆结构和内容
                         false(默认值):只克隆结构
     
            function replaceNode () {
                //1.获取旧的节点
                var span = document.getElementById("span1");
                //2.创建一个新的节点
                var div = document.createElement('div');
                div.innerHTML = "这是新的节点";
                //3.用新节点替换旧节点
                span.parentNode.replaceChild(div,span);
            }
     
            //复制节点
            function copy () {
                //1.获取要复制的元素
                var ul = document.getElementById("ul1");
                //2.复制
                var ul2 = ul.cloneNode(true);
                //3.将复制好的内容添加到div中
                document.getElementById("div1").appendChild(ul2);
            }
     
    删除节点
                   removeChild()
                         从元素中删除子节点
                         格式:
                             要被删除的元素.parentNode.removeChild(要删除的元素)
            function delSpan () {
                var span = document.getElementsByTagName("span")[0];
                span.parentNode.removeChild(span);
            }
     
    节点的属性
                    1)innerHTML
                        获取文本内容,元素节点使用,文本节点不能使用(使用 nodeValue)。
                        innerHTML在设置值时可以识别字符串中的html代码并执行
                    2)innerText
                        获取文本内容,从起始位置到终止位置的内容, 但它去除Html标签
                    3)firstChild
                        获取当前元素节点的第一个子节点
                    4)lastChild
                        获取当前元素节点的最后一个子节点
                    4)nextSibling
                        获取当前节点的后一个同级节点
                    5)previousSibling
                        获取当前节点的前一个同级节点
                    6)parentNode
                        获取当前元素的父节点
                    7)childNodes
                        获取当前元素的所有子节点
     
    操作元素的属性
         1)通过获取元素对象来操作属性
                    如:
                    var txt =document.getElementById("txt");
                    txt.id、txt.value......
                2)通过方法来操作属性
                    获取:getAttribute()
                    设置:setAttribute()
                    删除:removeAttribute()
     
                ----------
                获取标签之间的文本:
                    innerHTML innerText 
                获取表单元素的值时:
                    value
            var txt = document.getElementsByTagName("input")[0];
            //获取元素属性
            console.log(txt.type);
            console.log(txt.getAttribute("type"));
     
            //设置元素的属性
            txt.value = "123456";
            txt.setAttribute("type","password");
     
            //删除属性
            document.getElementsByTagName("a")[0].removeAttribute("href")
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    计划给予心脏公式
    平原绫香 Hirahara Ayaka-Jupiter
    legend---十一、thinkphp事务中if($ans1&&$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里
    chrome控制台常用技巧有哪些
    js中console强大之处体现在哪
    Pocket英语语法---五、形式主语是怎么回事
    智课雅思词汇---十二、vent是什么意思
    英语影视台词---八、the shawshank redemption
    Pocket英语语法---四、should的同义词是谁
    m_Orchestrate learning system---二十七、修改时如何快速找到作用位置
  • 原文地址:https://www.cnblogs.com/develop-/p/7103749.html
Copyright © 2011-2022 走看看