zoukankan      html  css  js  c++  java
  • DOM节点操作

    ======================复习=============================

    ========================================================

    快捷键:操作节点(caozuojiedian)
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="js/domready.js"></script><!--必须导入该文件,搜狗输入domready.js-->
    <script>
    myReady(function(){
    // var myul=document.getElementById('myul');//获得ul对象
    // var li=document.createElement("li");//创建li对象
    // var txt=document.createTextNode("4");//创建文本对象
    // li.appendChild(txt);//给li对象添加文本对象。
    // myul.appendChild(li);//给myul对象添加子元素,添加到最后子元素后面。
    //
    // var firstChild=myul.firstElementChild;//获得第一个子元素。
    // myul.appendChild(firstChild);//返回的是被添加的对象。把第一个子节点移动到对象myul元素中最后一个//子元素后面。这里并没有复制。而是移动。
    // var obj=myul.appendChild(firstChild);//这里并没有再次移动第一个子元素。只是做一次读取操作。
    // console.log(obj);//显示:<li>1</li> 该li对象。返回被添加的对象。

    //ul.insertBefore(newLi,liTwo); 指定在某个父元素ul里面,把newLi元素对象添加到指定liTwo元素对象前面。如果第二个参数对象为null,那么直接把对象newLi对象添加到父元素里面最后面的子元素后面,类似于:ul.appendChild(newLi);
    // var ul=document.getElementById("myul");//获取ul对象
    // var newLi=document.createElement("li");//创建li元素对象
    // var txt=document.createTextNode("4");//创建文本节点对象
    // newLi.appendChild(txt);//把文本节点添加到元素节点li对象中。
    // var liTwo=ul.children[1];//获取ul对象的第二个子节点对象
    //var liTwo=ul.children.item(1);//获取ul对象的第二个子节点对象
    // var ret=ul.insertBefore(newLi,liTwo);//把li元素节点添加到ul的第二个子节点之前。ul.insertBefore(newObj,obj),insertBefore方法跟两个数,newObj是添加的对象,obj被指定位置前面添加的对象。即:在指定的父级元素ul对象里面,把某个对象加到指定对象的前面。
    // console.log(ret);//返回添加的对象:<li>4</li>
    // console.log(ret.innerHTML);//返回对象里面的文本内容。
    // ul.insertBefore(newLi,null);//把newLi直接添加到ul里面最后子元素的后面。
    //ul.insertBefore(newLi,ul.firstElementChild);//把newLi直接添加到ul第一个子节点前面。
    //ul.insertBefore(newLi,ul.lastElementChild);//把newLi直接添加到ul中最后一个子节点前面。

    //ul.replaceChild(newLi,li2); 指定父元素ul下面,用新创建的对象newLi,把指定的li2对象替换掉,如果ul父元素中不存在li2对象,那么就会报错。
    // var myUl=document.getElementById("myUl");//获取ul对象。
    // var newLi=document.createElement("li");//创建li对象
    // var txt=document.createTextNode("5");//创建文本节点对象
    // newLi.appendChild(txt);//把文本节点txt装填到li元素对象中。
    // var ret=myUl.replaceChild(newLi,myUl.children.item(1));//用newLi元素对象替换ul中的第二个子元素对象。
    // console.log(ret);//返回:被替换的子元素对象<li>2</li>,在firefox中可以查看各种属性,在chrome中只显示对象本省。


    //ul.cloneNode(boolean);可以跟一个布尔值,默认是false可以省略,false:表示只复制当前节点对象,不复制子节点和孙子节点;true:表示深度复制。包括所有子节点以及孙子节点。cloneNode( )方法克隆所有属性以及他们的值,如果需要克隆所有后代 需要把deep参数设置为true,默认是 false
    // var myUl=document.getElementById("myUl");
    // var cloneUl=myUl.cloneNode();//只复制当前节点对象,不复制子节点和孙子节点值为false时,可以省略。
    // console.log(cloneUl);//控制台打印所复制的节点
    //document.body.insertBefore(cloneUl,null);// 把复制的节点添加到文档中的body子元素的末尾。
    // document.body.appendChild(cloneUl);


    //div.normalize();//将相邻的两个文本节点合并。方法移除空的文本节点,并连接相邻的文本节点
    // var myDiv=document.createElement("div");//创建div元素对象
    // var txt1=document.createTextNode("woaini");//创建第一个文本节点对象
    // myDiv.appendChild(txt1);//将文本节点txt1添加到div元素对象中。
    // var txt2=document.createTextNode("我爱你");//创建第二个文本节点.
    // myDiv.appendChild(txt2);//将文本节点txt2添加到div元素对象中。
    // document.body.appendChild(myDiv);
    // console.log(myDiv.childNodes.length);//获取所有子节点包括空节点,即:没有html标签的文字节点,所以这里的值为:2;
    // console.log(myDiv.childElementCount); 只获取有html标签的节点,以上都是文本节点,所以这里的值为:0.
    // myDiv.normalize();//将相邻的两个文本节点合并。
    // console.log(myDiv.childNodes.length);//返回1.
    // console.log(myDiv.firstChild.wholeText);//输出第一个子节点的内容。
    //技巧:如果想要了解某个对象的属性,可以直接使用firefox或者chrome在网页控制台中输出该对象,点击该对象即可查看所有的属性。如上data可以,使用console.log(myDiv.firstChild)点击该对象查看属性,想要得到该对象的值,可以查看后使用:data: "woaini我爱你",nodeValue: "woaini我爱你",textContent: "woaini我爱你",wholeText: "woaini我爱你"

    //splitText()方法将在指定的 offset 处把 Text 节点分割成两个节点。原始的 Text 节点将被修改,使它包含 offset 指定的位置之前的文本内容(但不包括文本内容)。新的 Text 节点将被创建,用于存放从 offset 位置(包括该位置上的字符)到原字符结尾的所有字符。新的 Text 节点是该方法的返回值。splitText() 方法按照指定的 offset 把文本节点分割为两个节点
    // var myDiv=document.createElement("div");
    // var txt=document.createTextNode("我爱你woaini");
    // myDiv.appendChild(txt);
    // document.body.appendChild(myDiv);
    // var newTxt= myDiv.firstChild.splitText(1);//把myDiv的第一个文本节点以索引1前面拆分为两个文本对象。
    // console.log(newTxt);//返回:索引从1到最后的文本对象:"爱你woaini"。
    // console.log(myDiv.childNodes);//获取拆分后的所有节点对象 NodeList(2) [text, text] text表示文本对象
    // console.log(myDiv.childNodes[0]);//获取第一个子元素文本节点 "我"
    // console.log(myDiv.childNodes[1]);//获取第二个子元素文本节点 "我爱你woaini" 计算所有子节点对象,包括空节点和文本节点(类数组对象)
    //console.log(myDiv.children[1]);只计算有html标签的对象,这里没有

    //div.removeChild(index);必须传入一个索引参数,否则报错,如果需要删除所有子元素,则可使用遍历删除所有子元素。
    // var myUl=document.getElementById("myUl");//获取ul对象
    // console.log(myUl.childNodes.length);//返回:7 获取子节点长度。包括空文本。
    // var remove=myUl.removeChild(myUl.childNodes[1]);//返回删除myUll的第几个子节点。childNodes返回的是类数组对象,该对象包括空文本对象。返回的是被删除的对象。这是第一套DOM操作API
    // console.log(remove);
    // console.log(myUl.childElementCount);//获取非空子节点长度。这里子节点总数为:3,只有3个html标签元素
    // console.log(myUl.removeChild(myUl.children[2]));//返回被删除的对象:<li>3</li>,移除下标为2的元素对象。这里使用的第二套DOM操作 API。
    // console.log(myUl.childNodes.length);//返回:7 删除后的myUl对象的所有子元素长度。


    //!表示相反,+表示转换为Number,"v":IE表示为字符串"v",非IE表示为一个垂直制表符:可以理解为一个空格。1表示1。 !+"v1",IE解析为:Number("v1")返回isNaN,!isNaN就是真,其他浏览器返回false
    // if (!+"v1") {
    // alert("love");//IE浏览器显示
    // }else{
    // alert("you");//非IE浏览器显示
    // }
    //removeNode(deep);这是IE私有实现方法。deep深度,true/false,true深度删除子节点,false只删除本身节点,不删除子节点以及孙子节点。
    // var myUl=document.getElementById("myUl");
    // var rem=myUl.removeNode(true);//返回被删除的对象(包括子节点和孙子节点),删除myUl对象本身
    // console.log(rem.outerHTML);//console.log(rem.tagName);


    //body.removeChild(document.getElementById("span"));//移除子节点,只有在IE6-IE8中才会返回一个文档碎片对象,久而久之会引发内存泄露的问题,其他浏览器则不会,因为返回值是null。
    // var div=document.createElement("div");//创建div对象
    // console.log(div.parentNode);//创建div对象而没有进行装填到DOM树上,获取它的父元素节点时,所有的浏览器都返回null。
    //将div对象添加到DOM树上再移除,只在IE6-IE8会返回一个文档碎片对象,可以重复使用该对象,久而久之会存在一个内存溢出的现象。其他浏览器则不会,因为返回值是null。
    // document.body.removeChild(document.body.appendChild(div));//添加div后在移除div对象。
    // console.log(div.parentNode);//IE6-IE8返回一个Object对象,用户可以操作,时间一久IE6-IE8会出现内存泄露,其他浏览器则不会,因为返回值是null。
    //console.log(div.parentNode.nodeType);//直接报错


    // //body.innerHTML="";表示删除body标签内的所有子元素以及孙子元素。
    // var myUl=document.getElementById("myUl");//获取ul对象
    // document.body.innerHTML="";//删除body里面的所有内容。
    // console.log(myUl.parentNode);//返回null,获取myUl的父节点。

    var myUl2=document.getElementById("myUl2");
    myUl2.parentNode.removeChild(myUl2);//获取myUl2的父元素删除myUl2元素对象
    //使用removeChild在IE6-IE8中,删除对象以及后代节点,但是该节点是可以访问的,并不是完全删除,但是不在内存中。所以myUl2.innerHTML正常打印。
    console.log(myUl2.id+"---"+myUl2.innerHTML);//打印被删除对象的id和内容

    var myUl=document.getElementById("myUl");
    myUl.parentNode.innerHTML="";//清空对象myUl里面的子节点以及孙子节点
    //使用innerHTML在IE6-IE8中,会把对象里面的所有子节点以及孙子节点全部清空,不可再访问。所以下面的myUl.innerTHML是空的,访问不到。
    console.log(myUl.id+myUl.innerHTML);//打印被删除对象的id和内容
    })
    </script>
    </head>
    <body id="body">
    <ul id="myUl">
    <li>1<a>1</a></li>
    <li>2</li>
    <li>3</li>
    </ul>
    <ul id="myUl2">
    <li>1<a>1</a></li>
    <li>2</li>
    <li>3</li>
    </ul>
    </body>

  • 相关阅读:
    将Nginx添加到windows服务中
    springboot使用redis管理session
    GIT常用命令
    阻止360、谷歌浏览器表单自动填充
    谈谈对Spring IOC的理解
    同一个Nginx服务器同一端口配置多个代理服务
    LeetCode 653. Two Sum IV
    109. Convert Sorted List to Binary Search Tree(根据有序链表构造平衡的二叉查找树)
    108. Convert Sorted Array to Binary Search Tree(从有序数组中构造平衡的BST)
    LeetCode 236. Lowest Common Ancestor of a Binary Tree(二叉树求两点LCA)
  • 原文地址:https://www.cnblogs.com/Knowledge-is-infinite/p/10878754.html
Copyright © 2011-2022 走看看