主页 > 人工智能  > 

【JavascriptDay13、14、15、16】

【JavascriptDay13、14、15、16】
html的DOM操作

// JS 是为了让页面实现动态网页效果         //    动态和静态区分取决于JS的和页面标签的数据交互         //      动态网页:有数据交互         //      静态网页:无数据交互

        // JS 和 元素的关联操作对象 DOM         //      整个HTML页面的整体代码叫做 DOM文档         //      每个标签阶段叫做DOM对象|DOM元素|DOM节点

        // JS 查询、修改、删除、更新 DOM元素的方式实现页面数据交互效果         document.write("<h1>DOM元素添加操作</h1>")         //      document : DOM文档 => 整个页面代码         console.log(document);                  // 元素查询,必须先保证元素存在 => dom查询必须晚于DOM的渲染         console.log( window.onload );         window.onload = function(){             console.log("HTML页面渲染完成");                          // 1. 基于标签ID查询元素 => 从上向下查询第一个符合规则的DOM元素             var h1Dom = document.getElementById("a");             console.log(h1Dom);             // DOM对象.innerHTML 通过js = 赋值运算符,完成标签内容的填充             h1Dom.innerHTML = new Date().toLocaleString();         }

html的DOM查询方法

    window.onload = function(){         // 1. 基于标签ID查询元素 => 从上向下查询第一个符合规则的DOM元素         var h1Dom = document.getElementById("a");              // 2. 基于标签名称查询元素集合          //          => 返回的是一个类似数组结构但不能使用数组方法的类数组数据         var liList = document.getElementsByTagName("li");         console.log(liList);

        // 3. 基于class样式查询元素集合         var tipList = document.getElementsByClassName("tip");         console.log( tipList );                  // 基于el查询元素         //     el|selecter:element select css选择器         // 4. document.querySelector => 从上而下查询第一个符合选择器规则元素,返回一个元素         // 5. document.querySelectorAll => 查询所有符合规则的元素,返回一个集合         var aDom = document.querySelector("#a");         console.log(aDom);         var tipDom = document.querySelector(".tip");         console.log(tipDom);         var tipDoms = document.querySelectorAll(".tip");         console.log(tipDoms);                  var ulTipDoms = document.querySelectorAll("ul .tip");         console.log(ulTipDoms);                  var ulDom = document.querySelector("#b");         console.log(ulDom);         // 从ulDom元素内部 查找class=tip的所有元素         var ulTipDoms2 = ulDom.querySelectorAll(".tip")         console.log(ulTipDoms2);                  console.log( document ); // 文档类型标识,html-DOM对象         // 6. 快速获取HTML         console.log( document.documentElement ); // html-DOM对象         // 7. 快速获取body         console.log( document.body ); // body-DOM对象         // 8. 快速获取head         console.log( document.head ); // head-DOM对象     }

元素事件

 function showTip(){             alert("111")         }

        window.onload = function(){             // 步骤1:获取DOM对象             var btnDom1 = document.querySelector("#btn1");             // 步骤2:通过对象属性 onclick 取值方法完成事件绑定             btnDom1.onclick = function(){                 alert("2222")             }             // console.log(btnDom1);             console.dir(btnDom1); // 输出对象格式

            var liDoms = document.querySelectorAll("li");             for (var i = 0; i < liDoms.length; i++) {                 // console.log( liDoms[i] );                 liDoms[i].onclick = function(){                     alert("li提示")                 }             }         }

        // 完整事件文档: developer.mozilla.org/zh-CN/docs/Web/API/Element#%E4%BA%8B%E4%BB%B6

元素的内容控制

<script>         // innerText 属性用于获取或覆盖标签内容         //      区别         //          取值:去除换行,首尾空格,去除标签和标签属性,只保留文本,文本之间的空格只保留一个         //          赋值:如果字符串符合标签格式,覆盖时不会进行标签解析         //               会将\n转换为<br>标签         function editTextContent(){             var textDom = document.querySelector("#text1")             var oldText1 = textDom.innerText;             console.log(oldText1);                          // textDom.innerText = '<h3 style="color:red;">标签规则定义的字符串</h3>';             textDom.innerText = 'aaaa\nbbbb\nccccc';         }     </script>

    <hr>     <div id="content">         html3的       原始内容         <span style="color: red;">标签</span>     </div>     <input type="button" value="textContent操作" οnclick="editContent()">     <script>         // textContent 属性用于获取或覆盖标签内容         //     特性等同于 innerText 的         //     和innerText区别         //          取值:不会删除换行,和空格         //          赋值:不会将\n转换为<br>         function editContent(){             var contentDom = document.querySelector("#content");             console.log( contentDom.textContent );                          contentDom.textContent = 'aaaa\nbbbb\nccccc';         }     </script>

元素的属性操作

// 标签的自定义属性,被存放在 DOM对象的 attributes 属性对象上         //      attributes 存储的自定义属性 以属性名作为对象key,value取值是一个对象提供value记录属性值

        // attributes 属性在DOM对象上存在两个专用方法         //      DOM对象.getAttribute("自定义属性名") => 获取自定义属性对应的值         //      DOM对象.setAttribute("自定义属性名","属性值")

        function getDomAttr(){             var pDom = document.querySelector("#pDom");             console.dir(pDom)             // console.log( pDom.username );             // console.log( pDom.attributes.username.value );             var v = pDom.getAttribute("username");             console.log(v);                                   }         function setDomAttr(){             var pDom = document.querySelector("#pDom");             console.log(1111);             // pDom.username = "李四";             // pDom.attributes.username.value = "李四"             pDom.setAttribute("username","李四")         }

元素样式操作

function setStyle(){             var pDom = document.querySelector("#pDom");

            // JS获取的DOM对象,存在一个行内样式的记录属性 style             //      dom对象.style.样式名   => 取样式             //      dom对象.style.样式名="样式有效值"   => 设置样式                          console.log(pDom.style);                          console.log( pDom.style.color );             // pDom.style.color = "blue";             // pDom.style.color = "rgb(0,255,0)";             // pDom.style.color = "rgba()";             // pDom.style.color = "#00FF00";             pDom.style.color = "#FF000099";

            console.log( pDom.style.border );             // pDom.style.border = "2px solid red";             // pDom.style.border-color = "red"; // 报错             // pDom.style.borderColor = "red"; // 正确             pDom.style["border-color"] = "red"; // 正确

            // 修改后的样式依然需要遵受样式优先级         }

// class 是所有代码系统的关键字 => 类         // class 在JS中是关键字

        function editDomClass(){             var pDom = document.querySelector("#pDom");             // 因为class是关键字,所有 元素的类样式,没有使用class作为属性名             console.log( pDom.class );             // 标签的类样式,使用 className 作为DOM属性名             console.log( pDom.className ); // 取值                          // className 赋值是和 标签定义class属性的规则一致             //      类样式名只有在样式代码中定义,才会存在样式             //      多个类样式直接以 空格 隔开             // pDom.className = "border"; // 完全覆盖

            // 方法1 :以字符分割数组操作             // var str = pDom.className;             // var arr = str.split(" ");             // console.log(arr);             // arr.push("border");             // pDom.className = arr.join(" ");

            // 方式2 : 字符串操作             // pDom.className = pDom.className + " border";

            // 方法3 : h5辅助属性 classList             console.log( pDom.classist );

            // pDom.classList.add("border"); // 添加新样式             // pDom.classList.remove("fc"); // 删除已有样式             pDom.classList.toggle("fc"); // 样式切换,当操作的样式存在则删除,不存在则添加         }

标签的dataset数据

<!--          DOM dataset 数据 :提供一种简单的自定义属性的赋值和取值操作             1. 在标签上以 data-自定义属性名 = "属性值" 的方式记录数据             2. 通过DOM对象的 dataset 直接调用 自定义属性名即可     -->     <p data-chw="张三" id="p1">dataset数据</p>     <input type="button" value="获取数据" οnclick="getDataSet1()">     <script>         function getDataSet1(){             var pDom1 = document.querySelector("#p1");             console.log( pDom1.attributes['data-chw'].value );             console.log( pDom1.getAttribute("data-chw") );

            console.dir( pDom1 );             console.log( pDom1.dataset );

            console.log( pDom1.dataset.chw );

                     }

    </script>

页面组成

 <!-- body 定义在 html 内部,所以 body是html子节点,html是body的父节点 -->     <!-- head body 兄弟节点 -->

    <div class="ad">         <div class="content">             <img src="./img/831e0481607ea2a3.png" alt="" srcset="">             <input type="button" value="关闭" id="closeBtn">         </div>     </div>

    <script>         var closeBtn = document.querySelector("#closeBtn");         closeBtn.onclick = function(){             console.log( this.parentNode );             console.log( this.parentNode.parentNode );             this.parentNode.parentNode.style.display = "none";         }

    </script>

    <hr>     <ul id="abc">         <li>元素1</li>         <li>元素2</li>         <li>元素3</li>         <li>元素4</li>         <li>元素5</li>     </ul>     <input type="button" value="获取子节点" οnclick="printChildEle()">     <script>         function printChildEle(){             var lis = document.querySelectorAll("#abc li");             var ulDom = document.querySelector("#abc");             console.log( ulDom.childNodes );             console.log( ulDom.children );         }     </script>

节点的创建和添加

<input type="button" value="创建DIV" οnclick="createDom()">          <div id="box">              </div>

    <script>         // document.createElement(标签名称) 基于标签名称创建DOM节点         // 任意的DOM元素.appendChild(DOM对象) 向指定的元素内部添加子DOM节点(追加)         function createDom(){             var divDom1 = document.createElement("div");             console.log(divDom1);             divDom1.innerHTML = "内容:" + Math.random();             divDom1.classList.add("fs");             divDom1.style.color = "red";             console.log(divDom1);

            var boxDom = document.querySelector("#box");             // innerHTML需要字符串作为值,但DOM是对象,会被转换为 [object HTML标签名Element]             // boxDom.innerHTML = divDom1;             boxDom.appendChild( divDom1 )         }     </script>

    <hr>

    <div class="singBox">         <p>asdasdasdads</p>         <!-- <div class="sing">             <img src=" imgessl.kugou /custom/150/20201207/20201207134716994336.jpg" alt="" srcset="">             <div class="info">                 <p>乡村之旅:安静惬意·与自然同在</p>                 <p>介绍</p>                 <p>作者</p>             </div>         </div> -->     </div>

    <script src="./js/singData.js"></script>     <script>         console.log(list);         function initSingDom(){             var box = document.querySelector(".singBox");             box.innerHTML = ""; // 清空旧数据

            for (var i = 0; i < list.length; i++) {                 // console.log(list[i]);                 var imgDom = document.createElement("img");                 imgDom.src = list[i].pic;                 // console.log(imgDom);                                  var titleP = document.createElement("p");                 titleP.innerHTML = list[i].title;                 // console.log(titleP);                                  var infoP = document.createElement("p");                 infoP.innerHTML = list[i].info;                 // console.log(infoP);                                  var peP = document.createElement("p");                 peP.innerHTML = list[i].pe;                 // console.log(peP);                                  var divInfoBox = document.createElement("div");                 divInfoBox.classList.add("info");                 divInfoBox.appendChild(titleP);                 divInfoBox.appendChild(infoP);                 divInfoBox.appendChild(peP);                 // console.log(divInfoBox);                                  var singBox = document.createElement("div");                 singBox.classList.add("sing");                 singBox.appendChild(imgDom);                 singBox.appendChild(divInfoBox);                 // console.log(singBox);                                  box.appendChild(singBox);             }         }         initSingDom()     </script>

节点的操作方法

<input type="button" value="添加元素" οnclick="appendChildDom()">     <input type="button" value="插入元素" οnclick="insertChildDom()">     <input type="button" value="删除元素" οnclick="removeChildDom()">

    <div class="box" id="box">         <h5>默认第一个元素</h5>         <h5 id="a">默认第二个元素</h5>     </div>

    <script>         var boxDom = document.querySelector("#box");

        function appendChildDom(){             // 元素创建             var h5Dom = document.createElement("h5");             h5Dom.innerHTML = "appendChild标签内容";             // 在父元素的末尾追加新元素             boxDom.appendChild(h5Dom);         }

        function insertChildDom(){             var h5Dom = document.createElement("h5");             h5Dom.innerHTML = "insertBefore标签内容" + Math.random() ;             // 元素DOM.insertBefore() 在父元素内部,指定已存在的子元素前面进行新元素的插入             // boxDom.insertBefore(h5Dom, boxDom.children[1] )             boxDom.insertBefore(h5Dom, boxDom.children[0] );         }

        function removeChildDom(){             // boxDom.removeChild( boxDom.children[1] )             var h5Dom = document.querySelector("#a");             boxDom.removeChild( h5Dom )         }     </script>          <hr>     <!-- element.eleme /#/zh-CN/component/transfer         穿梭框      -->     <div class="tr">         <div class="box" id="box1">             <p>元素1</p>             <p>元素2</p>             <p>元素3</p>         </div>         <div>             <input type="button" value=">" οnclick="moveChild()">         </div>         <div class="box" id="box2"></div>     </div>     <script>         var box1 = document.querySelector("#box1");         var box2 = document.querySelector("#box2")

        function moveChild(){             // 元素的唯一性             box2.appendChild( box1.children[1] )         }     </script>

元素事件注册

<input type="button" value="按钮1" οnclick="showTip1()" οnclick="showTip2()">     <input type="button" value="按钮2" id="btn2">     <input type="button" value="按钮3" id="btn3">     <script>         // 传统事件注册 => DOM对象的 事件属性的赋值操作         //          + 同类型事件只能注册一次,HTML标签的后续注册不生效,JS的后续的注册属于覆盖操作         function showTip1(){             alert(1)         }         function showTip2(){             alert(11)         }

        var btn2 = document.querySelector("#btn2");         // console.dir(btn2)         btn2.onclick = function(){             alert(2)         }         btn2.onclick = function(){             alert(22)         }

        // 事件监听 => 独立于DOM属性之外的事件控制         //            事件监听的注册不是DOM对象的事件属性赋值         //            事件监听在同事件类型上,可以完成多方法的绑定 => 方法按照绑定先后触发         var btn3 = document.querySelector("#btn3");         // dom对象.addEventListener("事件名",执行方法)         //      事件名 是不包含on         btn3.addEventListener( "click", function(){             alert(3)         } );         btn3.addEventListener( "click", function(){             alert(33)         } );         btn3.addEventListener( "click", function(){             alert(333)         } );

        // 浏览器在元素选项卡中,提供两个页面 事件监听 属性         //      事件监听:包含当前元素的所有事件         //      属性:包含当前元素的所有属性         // console.log(btn3);         

    </script>

标签:

【JavascriptDay13、14、15、16】由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【JavascriptDay13、14、15、16】