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>
  • 相关阅读:
    Leetcode 238. Product of Array Except Self
    Leetcode 103. Binary Tree Zigzag Level Order Traversal
    Leetcode 290. Word Pattern
    Leetcode 205. Isomorphic Strings
    Leetcode 107. Binary Tree Level Order Traversal II
    Leetcode 102. Binary Tree Level Order Traversal
    三目运算符
    简单判断案例— 分支结构的应用
    用switch判断月份的练习
    java基本打印练习《我行我素购物系统》
  • 原文地址:https://www.cnblogs.com/yucheng6/p/9665827.html
Copyright © 2011-2022 走看看