zoukankan      html  css  js  c++  java
  • 9.17学习内容

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Day3</title>
        <style>
            #dv3 img {
                display: inline-block;
                height: 100px;
                 150px;
                cursor: pointer;
            }
            #dv6{
                height: 200px;
                 200px;
                border: 1px dashed #af521b;
            }
    
        </style>
    </head>
    <body>
        <script>
            //节点:Node所有的内容都是一个节点 可以分为标签、属性、文本
            //节点的属性:nodeType:节点类型:标签节点:1; 属性节点:2; 文本节点:3;
            //            nodeName:节点名:标签节点:大写标签名; 属性节点:小写属性名; 文本节点:#text;
            //            nodeValue:节点内容:标签节点:null; 属性节点:属性值; 文本节点:文本内容;
            //获取节点的方式:parentNode----获取父节点
            //                parentElement----获取父元素    元素就是一个节点,一般来说,一个父级元素如果包含子节点,那么这个父级
            //                                            元素很可能就是一个标签节点,所以说获取父元素实际上和获取父节点意义相同。
            //                chlidNodes----获取子节点--得到伪数组
            //                chlidren----获取子元素---得到伪数组    子节点和子元素不同!子节点包括文本节点,子元素只有标签节点
            //                
            //                firstChild----获取第一个子节点
            //                firstElementChild----获取第一个子元素
            //                
            //                lastChild----最后一个子节点
            //                lastElementChild----最后一个子元素
            //                
            //                previousSibling----前一个兄弟节点
            //                previousElementSibling----前一个兄弟元素
            //                
            //                nextSibling----后一个兄弟节点
            //                nextElementChild----后一个兄弟元素
            //                
            //                getAttributeNode("属性名")----根据属性名获取属性节点                            
        </script>
        
        <div id="dv1">
            <p>文本</p>
            <input type="text" name="" id="">
            <a href=""></a>
            <ul id="uu">
                <li>蒹葭苍苍</li>
                <li>白露为霜</li>
                <li>所谓伊人</li>
                <li>在水一方</li>
            </ul>
        </div>
        
        <script>
            var uObj = document.getElementById("uu");
            console.log(uObj.parentNode);
            console.log(uObj.parentElement);
            console.log(uObj.parentNode.nodeType);
            console.log(uObj.parentNode.nodeName);
            console.log(uObj.parentNode.nodeValue);
    
            var dvObj = document.getElementById("dv1");
            console.log(dvObj.childNodes);
            console.log(dvObj.children);
            console.log(dvObj.getAttributeNode("id"));
        </script>
    
        <!-- 案例:用节点的方式修改标签样式 -->
        <div id="dv2">
            <p>1</p>
            <span>2</span>
            <p>1</p>
            <span>2</span>
            <p>1</p>
            <a href="#">3</a>    <br/>
            <span>2</span>
            <p>1</p>
        </div>
    
        <script>
            var dv2 = document.getElementById("dv2");
            var dv2Nodes = dv2.childNodes;
            for (var i = 0; i < dv2Nodes.length; i++) {
                 if (dv2Nodes[i].nodeType == 1 && dv2Nodes[i].nodeName == "P") {
                     dv2Nodes[i].style.backgroundColor = "pink";
                 }
             } 
        </script>
    
        <!-- 案例:利用节点实现隔行变色 -->
        <ul id="uu2">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
        </ul>
        
        <script>
            var num = 0;
            var liObj = document.getElementById("uu2").childNodes;
            for (var i = 0; i < liObj.length; i++) {
                if (liObj[i].nodeType == 1 && liObj[i].nodeName == "LI") {
                    //liObj[i].style.backgroundColor = i%2 == 0 ? "red" : "yellow";        //结果全是yellow。因为获取子节点包括了文本节点,其中li标签就是第2.4.6.8...个子节点,对应索引就是第1.3.5.7...,为奇数,所以改变样式这行代码中的i都是奇数,结果全换成了yellow
                    num++            //为li子节点计数,以便于计算是第奇数个li还是第偶数个li(对2取余 ==0?)
                    liObj[i].style.backgroundColor = num%2 == 0 ? "red" : "yellow";    
    
                }
            }
        </script>
    
        <!-- 案例:切换背景图片 -->
        <div id="dv3">
            <img src="images/1.jpg" alt="">
            <img src="images/2.jpg" alt="">
            <img src="images/3.jpg" alt="">
        </div>
        <script>
            var imgObj = document.getElementById("dv3").children;
            for (var i = 0; i < imgObj.length; i++) {
                imgObj[i].onclick = function(){
                    //document.body.style.backgroundImage = "url(this.src)";    //这样不行,url(this.src)真个被看成了字符串
                    document.body.style.backgroundImage = "url("+this.src+")";    //另外要注意js设置CSS样式,应该为 属性 = "属性值";这里用"url("+this.src+")"得到的结果还是字符串,可以实现。
                    //
                    //document.body.style.backgroundColor = pink;    //这里属性值没加""报错
                    //document.body.style.backgroundColor = "pink";    //实现
                };
            }
        </script>
    
    
        <!-- 案例    :全选 -->
        <div id="dv4">
            <table border="1">
                <thead style="background-color: skyblue;">
                    <tr>
                        <td> <input type="checkbox"></td>
                        <td>全选</td>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td> <input type="checkbox"></td>
                        <td>吃饭</td>
                    </tr>
                    <tr>
                        <td> <input type="checkbox"></td>
                        <td>睡觉</td>
                    </tr>
                    <tr>
                        <td> <input type="checkbox"></td>
                        <td>打豆豆</td>
                    </tr>
                </tbody>
            </table>
        </div>
    
        <script>
            //获取元素
            var dv4 = document.getElementById("dv4");
            var hd = dv4.getElementsByTagName("thead")[0].getElementsByTagName("input")[0];    
            var bd = dv4.getElementsByTagName("tbody")[0].getElementsByTagName('input');
            //设置全选全不选
            hd.onclick = function(){
                // if (this.checked) {                    //checked获取元素的选中状态,返回一个布尔值
                //     for (var i = 0; i < bd.length; i++) {
                //         bd[i].checked = true;
                //     }
                // }else{
                //     for (var i = 0; i < bd.length; i++) {
                //         bd[i].checked = false;
                //     }
                // }
                
                //简化代码
                                
                    for (var i = 0; i < bd.length; i++) {
                        bd[i].checked = this.checked;
                    }
            };
            //设置根据下面的状态改变全选的复选框
            for (var i = 0; i < bd.length; i++) {
                bd[i].onclick = function(){
                    var flag = true;        //默认全选
                    for (var j = 0; j < bd.length; j++) {
                        //遍历,如果有没选中的则设置flag = false
                        if (!bd[j].checked) {
                            flag = false
                        }
                        //没设置else,即全都选中了的话flag为默认值
                    }
                    hd.checked = flag;
                };
            }
        </script>
        
        <!-- 创建元素:某些元素内容不是必须的,用户需要时才加载的东西,可以根据事件创建新元素,这样可以减少网页加载时获取的资源,提高用户体验 -->
        <!-- 创建元素的方式:    1.document.write("新元素")         
                            2.对象.innerHTML = ""    回忆 对象.innerText = "":不能创建新元素,只能获取和写入文本
                            3.document.createElement("标签名");    此方法创建一个标签,还需要用其他方法写入标签内容以及将新标签追加到父元素中
                             -->
        <input type="button" value="创建一个新标签" id="btn1">
        <input type="button" value="创建一个新标签" id="btn2">
        <input type="button" value="创建一个新标签" id="btn3">
        <div id="dv5"></div>
        <script>
            //点击按钮创建新标签
            document.getElementById("btn1").onclick = function(){
                document.write("<p>这是一个新标签</p>");        //document.write()方法在页面加载完毕之后使用会用新元素覆盖所有的原有元素
            };
            document.write("<p>这是另一个新标签</p>");    //在页面加载时使用document.write()方法不会覆盖
    
            document.getElementById("btn2").onclick = function(){
                document.getElementById("dv5").innerHTML = "<p>这是一个新标签</p>";    //innerHTML:以赋值的方式创建,每次都会覆盖原有内容,创建写好的内容。
            };
    
            document.getElementById("btn3").onclick = function(){
                var pObj = document.createElement("p");    //创建新标签
                pObj.innerText = "这是一个新标签";    //写入内容
                document.getElementById("dv5").appendChild(pObj);    //将创建的新标签追加到想要放的地方
            };
        </script>
    
        <!-- 案例:用两种方式创建新列表 -->
        <input type="button"  value = "创建" id="btn4">
        <input type="button"  value = "创建" id="btn5">
        <div id="dv6"></div>
        <script>
            
            var names = ["氢","氦","锂","铍","硼"];
            var dv6 = document.getElementById("dv6");
                //方式1利用innerHTML
                document.getElementById("btn4").onclick = function(){
                    //利用循环编写innerText里的内容
                    var str = "<ul>";
                    for (var i = 0; i < names.length; i++) {
                        str += "<li>" + names[i] + "</li>"; 
                    }
                    str += "</ul>";
                    dv6.innerHTML = str;
    
                    //循环注册鼠标经过的效果
                    var liObj = dv6.getElementsByTagName("ul")[0].children;    //直接getElementsByTagName("li")
                    for (var i = 0; i < liObj.length; i++) {
                        liObj[i].onmouseover = function(){
                            this.style.backgroundColor = "skyblue";        //注意,这里的this不能用liObj[i]!!
                        };
                        liObj[i].onmouseout = function(){
                            this.style.backgroundColor = "";        //注意,这里的this不能用liObj[i]!!
                        };        
                    }
                };
    
                //方式2利用document.createElement
            
                document.getElementById("btn5").onclick = function(){
                    
                    var ulObj = document.createElement("ul");        //创造一个ul
                    dv6.appendChild(ulObj);    //放入目标地方
                    for (var i = 0; i < names.length; i++) {    //循环创造li元素并注入
                            var li = document.createElement("li");
                            li.innerText = names[i];
                            
                            ulObj.appendChild(li);
                    }
    
                    //循环注册鼠标经过的效果
                    var liObj = dv6.getElementsByTagName("li");
                    for (var i = 0; i < liObj.length; i++) {
                            liObj[i].onmouseover = mouseoverHandle;
                            liObj[i].onmouseout = mouseoutHandle;            //这里创建了两个命名函数,好处:节省空间,在for循环中只利用了两个函数的空间。而在方式1中的for循环中,每个i都创建了两个匿名函数,使用了两个对应的内存空间。
                            //总结:循环中最好使用命名函数,不是循环的事件函数最好用匿名函数
                            
                    }    
                    function mouseoverHandle(){
                        this.style.backgroundColor = "skyblue";
                    }
                    function mouseoutHandle(){
                        this.style.backgroundColor = "";
                    }
                
                };
                    
                
        </script>
    
        <!-- 元素的一些方法:    1 父元素.appendChild(新元素) 在父元素的内部后面追加新元素
                            2 父元素.insertBefore(新元素,参照元素)在参照元素外面的前面插入新元素
                            3 父元素.replaceChild(新元素,参照元素)将参照元素替换为新元素
                            4 父元素.removeChild(元素)移除父元素中的指定元素
        -->
        <br>
        <input type="button" value="在c后面插入" id="btn6">
        <input type="button" value="在a前面插入" id="btn7">
        <input type="button" value="替换b" id="btn8">
        <input type="button" value="移除c" id="btn9">
        <div id="dv7">
            <p>a</p>
            <span>b</span>
            <h3>c</h3>
        </div>
    
        <script>
            var dv7 = document.getElementById("dv7");
            document.getElementById("btn6").onclick = function(){        
                var newElement = document.createElement("input");
                newElement.type = "button";
                newElement.value = "新元素";
                dv7.appendChild(newElement);
            };
     
            //这一比较这两个格式,下面这个无法实现多次点击插入多个,因为这个新元素是在点击事件之外创建的,每次点击调用的都是这一个新元素, appendChild()方法特别注意:如果文档树中已经存在了这个新元素,它将从文档树中删除,然后重新插入它的新位置。利用appendChild()可以实现改变元素位置的操作
            
    
            // var dv7 = document.getElementById("dv7");
            // var newElement = document.createElement("input");
            // newElement.type = "button";
            // newElement.value = "新元素";
            // document.getElementById("btn6").onclick = function(){    
            //     dv7.appendChild(newElement);
            // };
            // document.getElementById("btn7").onclick = function(){    //这个事件用来测试新元素已经存在的情况下的结果
            //     dv6.appendChild(newElement);
            // };
                
            document.getElementById("btn7").onclick = function(){        
                var newElement = document.createElement("input");
                newElement.type = "button";
                newElement.value = "新元素";
                dv7.insertBefore(newElement, dv7.firstElementChild);
            };
    
            document.getElementById("btn8").onclick = function(){        
                var newElement = document.createElement("input");
                newElement.type = "button";
                newElement.value = "新元素";
                dv7.replaceChild(newElement, dv7.getElementsByTagName("span")[0]);
            };
    
            document.getElementById("btn9").onclick = function(){        
                var newElement = document.createElement("input");
                newElement.type = "button";
                newElement.value = "新元素";
                dv7.removeChild(dv7.lastElementChild);
            };
    
        </script>
        
    
        <!-- 如何实现利用document.createElement多次触发不会创建多个元素:有则删除,无则创建 -->
    
    
        <!-- 如何为同一个元素的同一个事件绑定多个事件处理函数 :
            若直接编写多个事件函数,后面的会覆盖前面的
            方法:元素.addEventListener("事件名-去除on","事件处理函数","false");
        -->
        <button id="btn10" value="">按钮</button>
        <div id="dv8" style=" 100px; height: 100px; border: 1px solid yellow;"></div>
        <script>
            var btn10 = document.getElementById("btn10");
            var dv8 = document.getElementById("dv8");
            btn10.addEventListener("click", function(){
                dv8.style.backgroundColor = "pink";
                // dv8.style.background = "pink";
    
            }, false);
            btn10.addEventListener("click", function(){
                dv8.innerText = "叽叽叽叽鸡";
    
            }, false);
            btn10.addEventListener("click", function(){
                
                dv8.style.textAlign = "center";
            }, false);
            //可以看出三个事件函数都能发生
        </script>
    
    </body>
    </html>
  • 相关阅读:
    CODE
    JS中如何进行对象的深拷贝
    js数组操作---改变原数组和不改变原数组的方法整理
    echarts做双柱图
    如何在react中使用OrgChart?
    如何让背景透明?
    如何使用css选择器隐藏滚动条?
    input 修改placeholder中颜色和字体大小
    在input、textarea 标签的placeholder中实现换行的方法
    React Hooks异步操作防踩坑指南
  • 原文地址:https://www.cnblogs.com/yucheng6/p/9665827.html
Copyright © 2011-2022 走看看