Python全棧之學習JS(3)

1. dom節點

1.1 dom節點獲取

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOM document object model 文檔頂級節點</title>
</head>
<body>
    <div id="box">
        <p class="p1" >張三</p>
        <p class="p2">李四</p>
        <p class="p3">趙劉</p>
        <p name="ceshi1"></p>
        <p name="ceshi1"></p>
    </div>
    <div>
        <input type="text" name="username" />
        <input type="password" name="pwd" />
        <p1>112233</p1>
        <box>55666</box>
    </div>
    <script>
        console.log(document)
        // ### 1 通過id獲取div節點對象
        var box = document.getElementById("box");
        console.log(box);
        // ### 2 通過類名獲取節點對象 [返回的是數組]
        var p2 = document.getElementsByClassName("p2");
        console.log(p2 , typeof(p2));
        // 獲取李四節點對象
        lisi = p2[0];
        console.log(lisi)
        // 獲取王五節點對象
        wangwu = p2[1];
        console.log(wangwu);
        // ### 3.通過標簽獲取節點對象 [返回的是數組]
        var p = document.getElementsByTagName("p");
        console.log(p)
        console.log(p[1])
        // ### 4.通過標簽身上的name屬性 [返回的是數組] 一般用在input表單中
        var ceshi1 = document.getElementsByName("username")[0];
        console.log(ceshi1);

        // ### 通過css選擇器獲取對應的元素節點        
        // ### 5.querySelector ,隻獲取找到的第一個;
        var p1 = document.querySelector(".p1");
        console.log(p1)
        var box = document.querySelector("#box");
        console.log(box)
        // input表單有兩個,但是隻獲取第一個;
        var input = document.querySelector("input");
        console.log(input);
        // ### 6.querySelectorAll 獲取所有找到的元素節點,返回數組
        var all = document.querySelectorAll("input[name=username]")[0];
        console.log(all);

    </script>
</body>
</html>

1.2 節點元素層級關系

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>節點元素層級關系</title>
</head>
<body>
    <div id="box">
        <p>
            <input type="text" name="username" />
            <input type="password" name="pwd" />
        </p>
        <p class="p1" >張三</p>
        <p class="p2">李四</p>
        <p class="p3">趙劉</p>
        <p name="ceshi1"></p>
        <p name="ceshi1"></p>
    </div>
    <script>
        // ### 獲取對應的節點元素
        console.log(document)
        console.log(document.documentElement); // html
        console.log(document.documentElement.children) 
        // 找html裡面所有的子節點children
        var html_children = document.documentElement.children
        console.log(html_children) // head , body
        body = html_children[1];
        console.log(body); // head , body
        var div = body.children[0]
        console.log(div);
        var p0 = div.children[0]
        console.log(p0)
        var input = p0.children
        console.log(input)
        var input1 = input[0]
        console.log(input1)
        // 獲取下一個節點對象nextSibling
        console.log(input1.nextSibling.nextSibling);
        // 獲取下一個元素節點對象 nextElementSibling
        var input2 = input1.nextElementSibling;
        console.log(input2);
        // 獲取上一個節點對象 previousSibling
        console.log(input2.previousSibling)
        // 獲取上一個元素節點對象 previousElementSibling
        console.log(input2.previousElementSibling)
        // 獲取input2父節點元素對象;
        console.log(input2.parentElement)
    </script>
</body>
</html>

1.3 修改_清空內容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOM 修改/清空內容</title>
</head>
<body>
    <button onclick="func1()">修改內容</button>
    <button onclick="func2()">清空內容</button>
    <div id="box" style="border:solid 1px red;">
        <p>我是最帥的最有錢的<a href="#">最有味的</a>男人</p>
    </div>
    <script>
        // innerHTML 獲取標簽裡面所有內容 [標簽 + 文本]
        // innerText 獲取標簽裡面所有字符串[文本]
        var p = document.querySelector("#box p");
        // console.log把數據展現在控制臺
        console.log(p);
        // document.write 把數據以字符串的形式展現在瀏覽器
        document.write(p);
        // 點擊button1觸發如下任務 , 修改
        function func1(){
            var content = p.innerHTML;
            var content = p.innerText;
            console.log(content);
            // p.innerHTML = `我被修改瞭 <a href=''>點我中大獎</a>...1`;
            p.innerText = `我被修改瞭 <a href=''>點我中大獎</a>...2`;
        }
        // 點擊button2觸發如下任務 , 清空
        function func2(){
            p.innerHTML = '';
        }

    </script>
</body>
</html>

1.4 隱藏顯示密碼效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>隱藏顯示密碼效果</title>
</head>
<body>
    <input type="password" name="pwd" value="111" class="abcd" /> <button onclick="change()" id="btn" >點我顯示密碼</button>
    <div>
        <img src="images/oneal1.jpg" />
    </div>
    
    <script>
        // 效果1: 顯示隱藏密碼
        var password = document.querySelector("input[name=pwd]")
        console.log(password);
        console.log(password.type);
        console.log(password.name);
        console.log(password.value); 
        console.log(password.className)
        function change(){
            var btn = document.querySelector("#btn")
            console.log(btn);
            if(password.type=="password"){
                password.type = "text";
                btn.innerHTML = "點我隱藏密碼";
            }else{
                password.type= "password";
                btn.innerHTML = "點我顯示密碼";
            }
        }
        // 效果2:點擊換圖片
        var img = document.querySelector("img");
        console.log(img)
        img.onclick = function(){
            console.log(img.src) // http://127.0.0.1:5500/images/oneal1.jpg
            var arr = img.src.split("/")
            imgname = arr[arr.length - 1]
            console.log(arr , imgname);
            if(imgname == "oneal1.jpg"){
                img.src = "images/bakeli.jpg";
            }else{
                img.src = "images/oneal1.jpg";
            }
        }
    </script>
</body>
</html>![請添加圖片描述](https://img-blog.csdnimg.cn/28488ad590884492b9b9aabe1e7eeada.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA54as5aSc5rOh5p645p2e,size_20,color_FFFFFF,t_70,g_se,x_16)

2. 全選_反選_不選

2.1 全選_反選_不選

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>全選,反選,不選</title>
    <style>
        *
        {margin:0px;padding:0px;}
        ul
        {list-style: none;}
        #ul1 li
        {float:left;}
        #ul1 li button
        {width:80px;height:30px;}
        #ul1 li button:hover
        {background-color: tan;}
        #ul2
        {clear:both;}
    </style>
</head>
<body>
    <ul id="ul1">
        <li><button>全選</button></li>        
        <li><button>不選</button></li>
        <li><button>反選</button></li>
    </ul>
    <ul id="ul2">
        <li><input type="checkbox"  /> 看電影 </li>
        <li><input type="checkbox" /> 吃面 </li>
        <li><input type="checkbox" /> 燙頭 </li>
        <li><input type="checkbox" /> 跑步 </li>
        <li><input type="checkbox" /> 籃球 </li>
    </ul>
    <script>
        // 獲取btn節點對象
        var btn1 = document.querySelector("#ul1 li:nth-child(1) button");
        var btn2 = document.querySelector("#ul1 li:nth-child(2) button");
        var btn3 = document.querySelector("#ul1 li:nth-child(3) button");
        // 全選
        btn1.onclick = function(){
            // 獲取#ul2 li 裡的input
            /*
                var data_lst = document.getElementById("ul2").getElementsByTagName("input");
                console.log(data_lst)
            */
            var data_lst = document.querySelectorAll("#ul2 li input");
            console.log(data_lst)
            // 獲取數組當中每一個input節點元素對象
            for(var input of data_lst){
                //console.log(input.checked)
                // 設置節點input的checked屬性為true;
                input.checked = true;                
            }
        }
        // 不選
        btn2.onclick = function(){
            var data_lst = document.querySelectorAll("#ul2 li input");
            console.log(data_lst)
            // 獲取數組當中每一個input節點元素對象
            for(var input of data_lst){
                //console.log(input.checked)
                // 設置節點input的checked屬性為true;
                input.checked = false;                
            }
        }
        // 反選
        btn3.onclick = function(){
            var data_lst = document.querySelectorAll("#ul2 li input");
            console.log(data_lst)
            // 獲取數組當中每一個input節點元素對象
            for(var input of data_lst){
                if(input.checked === true){
                    input.checked = false;
                }else{
                    input.checked = true;
                }
            }
        }
    </script>

</body>
</html>

2.2 js控制css的相關屬性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js控制css的相關屬性</title>
    <style>
        .box
        {border:solid 1px red;}
        .box_new
        {position: absolute; left:200px;}
    </style>
</head>
<body>
    <button id="box1">點擊我換顏色</button>
    <button id="box2">點擊我隱藏</button>
    <button id="box3">點擊我顯示</button>
    <button id="box4">點擊邊框換圓角</button>
    <button id="box5">點擊加樣式</button>
    <div class="box" style="width:300px;height:200px;background-color: yellow;font-size:40px;">你好評</div>
   <script>
        var box = document.querySelector(".box");
        console.log(box);
        // js的dom對象獲取相關的css屬性
        // 獲取方法一
        console.log(box.style.width);
        console.log(box.style.backgroundColor);
        // 獲取方法二
        console.log(box.style["width"]);
        console.log(box.style["background-color"]);
        console.log(box.style["font-size"]);
        // 獲取方法三 getComputedStyle 獲取該節點對象的所有樣式
       console.log( window.getComputedStyle(box)["font-size"] , "<===getComputedStyle===>");
       console.log( window.getComputedStyle(box).fontSize , "<===getComputedStyle===>");
        // 事件綁定
       var box1 = document.getElementById("box1");
       var box2 = document.getElementById("box2");
       var box3 = document.getElementById("box3");
       var box4 = document.getElementById("box4");
       var box5 = document.getElementById("box5");
       box1.onclick = function(){
            box.style.backgroundColor = "red";
       }
       box2.onclick = function(){
            box.style.display = "none";
       }
       box3.onclick = function(){
            box.style.display = "block";
       }
       box4.onclick = function(){
            //box.style.borderRadius = "100%";
            var point = 0;
            var t = setInterval( function(){
                box.style.borderRadius = `${point}%`;
                if(point < 100){
                    point++;
                }else{
                    clearInterval(t)
                    console.log("結束瞭... ")
                }
            } , 50)
        }
        /* 重點 添加樣式*/
        box5.onclick = function(){
            // box.className = "box box_new";
            box.className += " box_new";
        }
    </script>
</body>
</html>

2.3 js事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js事件</title>
    <style>
        *{margin:0px;padding:0px;}
        .box
        {width:100px;height:100px;background: green;position: absolute;left:0px;}
    </style>
</head>
<body>
    <!-- 1.事件的靜態綁定 -->
    <button onclick="func1()">按鈕1</button>
    <div class="box"></div>
    <script>
        var box = document.getElementsByClassName("box")[0];
        var t;
        console.log(box);
        function func1(){
            var left = parseInt(window.getComputedStyle(box).left)
            console.log(left ,typeof(left));
            // console.log(box.style.left);
            t = setInterval(function(){
                left += 10;
                box.style.left  = `${left}px`;
            } , 50)
        } 
        
        // 2.事件的動態綁定 
        // onmouseover 鼠標指針懸停在指定元素上時觸發
        box.onmouseover = function(){
            clearInterval(t);
        }
        // onmouseout  鼠標指針離開指定元素時觸發
        box.onmouseout = function(){
            func1()
        }
    </script>
</body>
</html>

3. 模態框

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>模態框</title>
    <style>
        .box {
            position:fixed;
            width:100%;
            height:100%;
            top:0px;
            background-color: greenyellow;
            display: none;
        }
        .content
        {            
            border:solid 1px red;
            width:500px;
            height:500px;
            background-color:tan;
            margin:auto;
            margin-top:14%;        
        }
    </style>
</head>
<body>
    <button id="login">登錄</button>
    <div class="box">
        <div class="content" >
            <span class="close">X</span>
            <br />
            <span>賬號: <input type="text"  /></span>
            <br / >
            <span>密碼: <input type="password"  /></span>
        </div>
    </div>
    <script>
        var btn = document.getElementById("login");
        var box = document.querySelector(".box");
        var close = document.querySelector(".close");
        btn.onclick = function(){
            console.log(11)
            box.style.display = "block";
        }
        close.onclick = function(){
            box.style.display = "none";
        }

    </script>
</body>
</html>

推薦閱讀: