zoukankan      html  css  js  c++  java
  • JS DOM基础

    DOM树节点:
    分为三大类,分别为元素节点、文本节点、属性节点
    文本节点、属性节点为元素节点的子节点,通过getElement系列方法可以取到元素节点
    所有节点属性命名使用驼峰法则


    HTML代码:

            <button id="btn1" onclick="getById()">通过id修改</button>
            <button id="btn2" onclick="getByName()">通过class修改</button>
            <button id="btn3" onclick="getByTagName()">通过tagname修改</button>
            <button id="btn4" onclick="getByClassName()">通过name修改</button>
            
            <div id="div1" class="div1" name="div1">div文字</div> 
            
            <!--<div id="div1" class="div1" name="div1">div文字</div> 
            <div id="div1" class="div1" name="div1">div文字</div> 
            <div id="div1" class="div1" name="div1">div文字</div> -->
            

    访问指定节点的方法:
    document.getElementById(); //通过id获取唯一的节点,多个同名id只会取第一个

                var a=1;
                function getById(){
                    if (a==1){
                        var div1Style = document.getElementById("div1");
                        div1Style.style.backgroundColor="royalblue"; //修改属性节点
                        
                        var div1 = document.getElementById("div1");
                        div1.innerHTML="哈哈哈"; //重置修改div中的HTML代码
                        a=2;
                    }else if(a==2){
                        var div1Style = document.getElementById("div1");
                        div1Style.style.backgroundColor="red"; //修改属性节点
                        a=1;
                    }
                    
                }

    document.getElementsByClassName(); //通过ClassName取到一个数组,包含1到多个(元素)节点
      使用方式:通过循环,取到每一个节点,循环次数:从0开始,到数组.length-1

      function getByClassName(){
                    var div1Style = document.getElementsByClassName("div1");
                    div1Style[0].style.backgroundColor="royalblue"; //修改属性节点
                    
                    var div1 = document.getElementsByClassName("div1");
                    div1[0].innerHTML="哈哈哈"; //重置修改div中的HTML代码
                    console.log(div1);
    
                }

    document.getElementsByName(); // 通过name取到一个数组,包含1到多个(元素)节点

      function getByName(){
                    var div1Style = document.getElementsByName("div1");
                    div1Style[0].style.backgroundColor="royalblue"; //修改属性节点
                    
                    var div1 = document.getElementsByName("div1");
                    div1[0].innerHTML="哈哈哈"; //重置修改div中的HTML代码
                    console.log(div1);
                    
    //                var a=document.getElementsByName("div1").length;
    //                for (i=0;i<a;i++) {
    //                    var div1Style = document.getElementsByName("div1");
    //                    div1Style[i].style.backgroundColor="royalblue"; 
    //                }
                    
                }

    document.getElementsByTagName(); // 通过Tagname取到一个数组,包含1到多个(元素)节点

     function getByTagName(){
                    var div1Style = document.getElementsByTagName("div");
                    div1Style[0].style.backgroundColor="royalblue"; //修改属性节点
                    
                    var div1 = document.getElementsByTagName("div");
                    div1[0].innerHTML="哈哈哈"; //重置修改div中的HTML代码
                    console.log(div1);
                    
                }

    除了getElementById,其他三个都是elements(即复数形式):getElementsByClassName、getElementsByName、getElementsByTagName,取到的是一个数组,包含多个元素;使用方式:通过循环,取到每一个节点,循环次数:从0开始,到数组.length-1(循环遍历);例:

    <input type="checkbox" name="input" value="苹果"/><span onclick="func0(0)">苹果</span>
    <input type="checkbox" name="input" value="菠萝" /><span onclick="func0(1)">菠萝</span>
    <input type="checkbox" name="input" value="香蕉" /><span onclick="func0(2)">香蕉</span>
    <input type="checkbox" name="input" value="西瓜" /><span onclick="func0(3)">西瓜</span>
    <button id="btna" onclick="checkbox()">选中的水果</button>
    function checkbox(){ var input = document.getElementsByName("input"); var choose=""; for (i=0;i<input.length;i++) {   if (input[i].checked==true) {     choose+=input[i].value+" ";   } } if (choose=="") {    alert("未选择"); return; } alert(choose); }

    JS修改样式总结:
    1、classname:为元素设置一个新的class名字

    div1.className="div2";

    2、.style:为元素设置一个新的样式,注意驼峰命名法

    div1Style.style.backgroundColor="royalblue";

    3、.style(.cssText) :为元素同时修改多个样式

     div1.style..cssText="200px; height:200px; ";

    以上都是修改行内样式表,获取到的也是行内样式表

    document.styleSheets[0].rules[0].style.cssText=""  //获取样式表中的样式

    通过修改classname修改元素的样式:(最常用)

    function getByClassName(){
        var div1Style = document.getElementsByClassName("div1"); div1[0].className="div2"; } <button id="btn1" onclick="getById()">通过id修改</button>     <div id="div1" class="div1" name="div1">div文字</div>
        .div1{      100px;     height: 100px;     background-color: red;     }     .div2{      200px;     height: 200px;     background-color: yellowgreen;     }

    getAttribute() 方法:
    document.getElementsByTagName("a")[0].getAttribute("target");
    setAttribute() 方法:两个值:属性名称,属性值
    document.getElementsByTagName("INPUT")[0].setAttribute("type","button");

         function getAttr(){
               var img1= document.getElementById("img1");
               alert(img1.getAttribute("src"));
            }
            function setAttr(){
              var img1= document.getElementById("img1");
              img1.setAttribute("src","../../img/mask_text_bg.png");
              img1.setAttribute("title","通过setAttribute设置了title");
              img1.setAttribute("style"," 100px; height: 100px;");
            }
                
        <button id="btn5" onclick="getAttr()">通过getAttr</button>
           <button id="btn6" onclick="setAttr()">通过name修改</button>
            
        <img src="../../img/HBuilder.png" id="img1" />

    查看元素节点:
    tagName属性:获取节点的标签名
    innerHTML:设置或者获取节点内部的所有HTML代码
    innerText:设置或者获取节点内部的所有文字

    获取层次节点的常用属性:
    1、.childNodes:获取元素的所有子节点,返回一个数组,包括元素节点、文本节点
    2、.firstChild:获取元素的第一个子节点
    3、.lastChild:获取元素的最后一个子节点
    4、.ownerDocument:获取当前文档根节点,在HTML文档中为document节点
    5、.parentNode:获取当前节点的父节点
    6、.previousSibling:获取当前节点的前一个兄弟节点
    7、.nextSibling:获取当前节点的后一个兄弟节点

    注:上述属性均会获得所有的元素节点和文本节点,如果只需要元素节点,需要使用对应element属性,
    例如:firstChild→firstElementChild

    8、.attribute:获取当前元素节点的所有属性节点

    创建和增加一个节点的方法:
    1、.createElement("标签名") :创建一个新节点,需配合setAttribute()方法设置节点的相关属性
    2、.appendChild(节点名) :在某元素的最后追加一个新节点
    3、.insertBefore(新节点名,目标节点名) :将新节点插入到目标节点之前
    4、.cloneChild(true/false) :克隆节点,需要克隆哪个就用哪个去调用克隆对象,
    括号内传递参数为true或false,true表示为克隆当前节点及所有子节点,false表示只克隆当前节点,不克隆子节点

         <ul id="ul1">
                <li>第一</li>
                <li>第二</li>
                <li>第三</li>
                <li>第四</li>
            </ul>
            
            <ul id="ul2">
                <li>第一</li>
                <li>第二</li>
                <li>第三</li>
                <li>第四</li>
            </ul>
            
            <button onclick="appendImg()">在最后插入一个图片</button>
            <button onclick="insertImg()">在两个ul之间插入一个图片</button>
            <button onclick="copyUl()">copy一个ul2 </button> <br />
      function appendImg(){ var img = document.createElement("img"); //创建一个图片节点 img.setAttribute("src","../../img/HBuilder.png"); //给img节点设置属性 document.body.appendChild(img); //将设置好的img节点追加到body最后 } function insertImg(){ var img = document.createElement("img"); img.setAttribute("src","../../img/HBuilder.png"); var ul2 = document.getElementById("ul2"); document.body.insertBefore(img,ul2); //在两个ul之间插入图片 } function copyUl(){ var ul2 = document.getElementById("ul2"); var ul2Clone = ul2.cloneNode(true); var btn = ul2.nextElementSibling; document.body.insertBefore(ul2Clone,btn); // console.log(ul2Clone); }

    删除和替换节点的方法:
    1、.removeChild() 从父容器中删除指定节点
    2、.replaceChild() 用新节点替换指定节点,
      如果新节点为页面中已有节点会将此节点删除后替换到指定节点

        <ul id="ul1">
                <li>第一</li>
                <li>第二</li>
                <li>第三</li>
                <li>第四</li>
            </ul>
            
            <ul id="ul2">
                <li>111</li>
                <li>222</li>
                <li>333</li>
                <li>444</li>
            </ul>
         <button onclick="delUl1()">删除ul1</button>
            <button onclick="repUl2()">ul1替换ul2</button>
            
            function delUl1(){
                var ul1 = document.getElementById("ul1");
                if (ul1) {
                    document.body.removeChild(ul1);
                } else{
                    alert("UL1已经被删除");
                }            
            }
            function repUl2(){
                var ul1 = document.getElementById("ul1");
                var ul2 = document.getElementById("ul2");
                document.body.replaceChild(ul1,ul2);
            }
            

    table 表格对象:
    rows[] 返回表格中的所有行的一个数组
    insertRow(index) 在表格的第index+1行插入一个新行
    deleteRow(index) 删除表格的第index+1行

    表格的行对象:
    cells 属性:返回当前行中的所有单元格的一个数组
    rowIndex :返回当前行在表格中索引顺序,从0开始
    insertCell() :在当前行的第index+1处插入一个单元格
    deleteCell() :删除当前行第index+1处的一个单元格

    表格的单元格对象:
    cellIndex :返回单元格在该行的索引顺序,从0开始
    innerHTML属性:返回或设置当前单元格中的HTML代码
    align 属性:设置当前单元格的水平对齐方式
    className :设置单元格的class名称

          <table id="t1">
                <tr>
                    <th>书名</th>
                    <th>价格</th>
                </tr>
                <tr>
                    <td>嘿嘿嘿</td>
                    <td>111</td>
                </tr>
                <tr>
                    <td>哈哈哈</td>
                    <td>222</td>
                </tr>
                <tr>
                    <td>呵呵呵</td>
                    <td>333</td>
                </tr>
                <tr>
                    <td>合计</td>
                    <td></td>
                </tr>
            </table> <br />
            <button onclick="addRow()">增加一行</button>
            <button onclick="delRow()">删除最后一行</button>
            <button onclick="changeTitle()">修改标题样式</button>
            <button onclick="copyRow()">复制最后一行</button>
            <button onclick="sum()">合计</button>
    
         function addRow(){
                var table = document.getElementById("t1");
                var newRow = table.insertRow(table.rows.length-1); //在表格最后一个行之前增加一个新行
                var cell0 = newRow.insertCell(0);
                cell0.innerHTML = "hhh";
                var cell1 = newRow.insertCell(1);
                cell1.innerHTML = "555";
                
    //          for (i=0;i<5;i++) {
    //               var celli = newRow.insertCell(i);
    //               celli.innerHTML = "hhh";
    //          }
                sum();
    
            }
            function delRow(){
                var table = document.getElementById("t1");
                if (table.rows.length>2) {
                    var delRow = table.deleteRow(table.rows.length-2);
                } else{
                    alert("删没了");
                }
                sum();
            }
            function changeTitle(){
                var table = document.getElementById("t1");
                var color = prompt("输入颜色:");
                table.rows[0].style = "background-color:"+color;
            }
            function copyRow(){
                var table = document.getElementById("t1");
                var copyRow = table.rows[table.rows.length-2].cloneNode(true);
                var heji = table.rows[table.rows.length-1];
                
                if (table.rows.length>2) {
                    table.getElementsByTagName("tbody")[0].insertBefore(copyRow,heji);
                //由于浏览器自动将表格的tr包裹在tbody中,所以tr实际并非table的子节点,故需取到tbody进行插入
                }else{
                    alert("没有可复制的行");
                }
                sum();
            }
            
            function sum(){
                var table = document.getElementById("t1");
                var rows = table.rows;
                if (rows.length<=2) {
                    alert("没有可计算的行");
                    return;
                }
                var sum = 0;
                for (i=1;i<=rows.length-2;i++) {
                    var cells = rows[i].cells;
                    sum += parseFloat(cells[cells.length-1].innerText);
                }
                rows[rows.length-1].cells[1].innerHTML= sum.toFixed(2) +"元";
            }
            
            
  • 相关阅读:
    noi放苹果
    二分 网线主管
    hdu 1421 dp
    hdu 1087 最大上升子序列的和(dp或线段树)
    快速排序+查找
    zoj 1425 最大交叉匹配
    hdu 3501 容斥原理或欧拉函数
    hdu 4671 异面直线的距离
    hdu 3320 计算几何(三维图形几何变换)
    hdu 2857 点在直线上的投影+直线的交点
  • 原文地址:https://www.cnblogs.com/greedymonkey/p/6719662.html
Copyright © 2011-2022 走看看