1. 程式人生 > 實用技巧 >04-初學JavaScript

04-初學JavaScript

經過週末的消沉還是要繼續學習程式碼的,不過今天可是備受打擊,閒話少說繼續整理

DOM操作

通常,通過 JavaScript,您需要操作 HTML 元素。

為了達成此目的,您需要首先找到這些元素。有好幾種完成此任務的方法:

  • 通過 id 查詢 HTML 元素
  • 通過標籤名查詢 HTML 元素
  • 通過類名查詢 HTML 元素
  • 通過 CSS 選擇器查詢 HTML 元素
  • 通過 HTML 物件集合查詢 HTML 元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    DOM:只要針對節點(元素)進行操作
    Dhtml
    dynamic:動態的
 <div  style="width: 100px;height: 100px;background: red" class="d">
     <p>放假!!!!!!!</p>
     <div style="width: 100px;height: 100px;background: blue">
     </div>
 </div>
    <div  style="width: 100px;height: 100px;background: yellow" class="d">

    </div>
    <script>
        文件物件
        var d1= document.getElementById('d1');
        console.log(d1);
        d1.innerText='這是重點';
        d1.innerHTML = '<h1>這是超級重點</h>';
        console.log(d1.innerHTML);
        var divs = document.getElementsByTagName('div');
        console.log(divs[1]);
        var divs = document.getElementsByClassName('d');
        console.log(divs[1]);
    </script>
</body>
</html>

通過這三種方法獲取表單元素

其中tagname 和classname都是陣列 只有id是一個元素 因為id只能有一個

二、

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="d1">
        <a href="" id="a">這是一個連結</a>
        <button onclick="f()">設定屬性按鈕</button>
        <button onclick="f1()">檢視屬性</button>
    </div>

<script>
    var d1 = document.getElementById('d1');
    console.log(d1.getElementsByTagName('a')[0]);
    //設定屬性值
    function f(){
        a.href='01-Dhtml.html';
        a.target='_blank';
        a.title='這是一個連結';
    }
    //顯示屬性值
    function f1(){
        console.log(a.href);
        console.log(a.target);
        console.log(a.title);
    }

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

通過獲取的元素設定屬性值

三、按鈕的提交

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="01-Dhtml.html" method="get">
        <input type="text" name="username" placeholder="請輸入使用者名稱">
        <span style="color: #ff0000"></span>
        <br>
<!--        <input type="submit" value="提交">-->
    </form>
    <button>按鈕</button>
<script>
    var i = document.getElementsByName('username')[0];
    var btn = document.getElementsByTagName('button')[0];
    var span = document.getElementsByTagName('span')[0]
    i .onblur = function (){
        console.log(i.value);
        span.innerText='liunengenng'
    }
    i.onfocus = function (){
        span.innerText=''
    }
</script>
</body>
</html>

這有兩種方式 一是通過button提交攔截 二是通過from攔截 form onsubmit 返回true\false 一定要加return

from沒有寫而是自己想的 最後查的資料

四、通過獲取元素 改變屬性值 來實現全選和全不選

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<fieldset>
    <legend>愛好</legend>
    全選<input type="checkbox" id="all"/><br>
    睡覺<input type="checkbox" name="hobby"/>
    吃飯<input type="checkbox" name="hobby" />
    玩遊戲<input type="checkbox" name="hobby"/>
</fieldset>
<script>
    var check = document.getElementsByName('hobby');
    document.getElementById('all').onclick = function (){
        for (var i = 0; i <check.length; i++) {
            check[i].checked = document.getElementById('all').checked;
        }
    }

    for (var i = 0; i <check.length; i++) {
        check[i].onclick = function() {
            for (var j = 0; j < check.length; j++) {
                if (check[j].checked) {
                    document.getElementById('all').checked = true;
                } else {
                    document.getElementById('all').checked = false;
                }
            }
        }
    }
    //
    // function f(){
    //     var temp= 0;
    //     for (var j = 0; j <check.length; j++) {
    //
    //         if(check[j].checked){
    //             temp++;
    //         }
    //     }
    //
    //     if(temp == 3){
    //         document.getElementById('all').checked=true;
    //     }else{
    //         document.getElementById('all').checked=false;
    //     }
    // }
</script>
</body>
</html>

由於這裡忘記獲取的是陣列因此這裡卡主了 通過 console.log 才找到哪裡出了錯誤

五、改變css樣式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        /*.c1{
            width: 100px;
            height: 100px;
            background: yellow;
            margin: auto;
        }*/
        .c1{
            width: 100px;
            height: 100px;
            background:yellow;
            margin: auto;
        }
        .c2{
            border-radius: 50px;
            box-shadow: 10px 10px 10px 10px red;
        }

    </style>
</head>
<body>
<!--一個元素是可以寫多個類名,但是id名只能有一個-->
<div  id="d1"> 1223</div>
<script>
var d1 = document.getElementById('d1');
d1.className='c1 c2'
</script>
</body>
</html>

這裡一定要記住classname 要想兩個樣式都實現 必須寫在一個裡 如d1.className='c1 c2'

六、自定義屬性 通過按鈕改變字型大小

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="d1">
123
    </div>
<button id="d2">按鈕1</button>
<button id="d3">按鈕2</button>
<button id="d4">按鈕3</button>
    <script>
        var d1 = document.getElementById('d1');
        var btn = document.getElementsByTagName('button');
        for (var i = 0; i <btn.length; i++) {
            btn[i].setAttribute('btn','b'+(i+1));
            btn[i].onclick=function (){
                if ('b1'== this.getAttribute('btn')){
                    d1.style.fontSize='12px';
                }
               if ('b2' == this.getAttribute('btn')){
                    d1.style.fontSize='16px';
                }
               if(this.getAttribute('btn'=='b3')){
                    d1.style.fontSize='32px';
                }
            }
        }

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

一開始想著點選 一個按鈕可以改變一個樣式 但是好像想簡單了 所以這裡有加了自定義屬性 ,可以通過setAttribute自定義屬性 通過getAttribute獲取屬性

七、用自定義屬性來實現摺疊選單

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }
        div{
            width: 600px;
            height: 600px;
            border: 1px solid red;
            margin: auto;


        }
        ul{
            list-style:none ;
            display: none;
        }
        p{
            width: 200px;
            height: 50px;
            text-align: center;
            line-height: 50px;
            font-size: 20px;
            background: grey;
            color: deepskyblue;
            cursor: pointer;

        }

    </style>
</head>
<body>
<div id="d1">
    <p>衣服</p>
    <ul>
        <li>阿迪</li>
        <li>耐克</li>
        <li>喬丹</li>
        <li>李寧</li>
    </ul>
    <p>圖書</p>
    <ul>
        <li>阿迪1</li>
        <li>耐克2</li>
        <li>喬丹3</li>
        <li>李寧4</li>
    </ul>
    <p>美食</p>
    <ul>
        <li>阿迪987</li>
        <li>耐克345</li>
        <li>喬丹123</li>
        <li>李寧12345</li>
    </ul>
    <p>學校</p>
    <ul>
        <li>阿迪987</li>
        <li>耐克345</li>
        <li>喬丹123</li>
        <li>李寧12345</li>
    </ul>
</div>
<script>
    var d1 = document.getElementById('d1');
    var ps = document.getElementsByTagName('p');
    var uls = document.getElementsByTagName('ul');

    for (var i = 0; i <ps.length; i++) {
        ps[i].setAttribute('pid',i);
        ps[i].onclick = function (){
            var pid = this.getAttribute('pid');
            var curul = uls[pid];

            if(curul.style.display=='block'){
                curul.style.display='none';
            }else{
                for (var i = 0; i <ps.length; i++) {
                    uls[i].style.display='none';
                }
                curul.style.display='block';
            }
        }
    }
</script>
</body>
</html>

這裡的邏輯我用了許久才明白 尤其是else裡的迴圈 判斷是如果是關的就執行else操作 迴圈看其他列表 如果他們是開的就關掉 這樣就是實現了 點開一個 關掉其他的列表

八、事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--    事件:事件是網頁檢測到的行為-->
<!--事件:事件源+事件型別+事件處理-->
<!--    事件繫結函式的方式-->
<!--方式一在元素內部寫事件,在事件註冊函式-->
    <button onclick="f()">按鈕1</button>
<script>
    // function f(){
    //     alert(123);
    // }
    // // 方式二:獲取元素物件。事件 = 匿名函式
    // document.getElementsByTagName('button')[0].onmouseenter = function (){
    //     alert(456);
    // }
    // 方式三(借用事件監聽函式):第一個引數為事件名,第二個為要呼叫的函式名
    document.getElementsByTagName('button')[0].addEventListener("mousedown", m)
    function m(){
        alert(789)
    }
</script>
</body>
</html>

事件的三種第二種用的比較多 第三種是特定情況的話才會使用

九、利用 滑鼠和鍵盤做了 一個結合事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="d1" style="width: 10px;height: 10px;border-radius:50px;background: red">

</div>
<script>
window.onload = function (e){
    document.onmousedown = function (e){
        var a = e.clientX;
        var b = e.clientY;

        document.getElementById('d1').style.marginLeft = a+'px';
        document.getElementById('d1').style.marginTop = b+'px';
        document.getElementById('d1').style.transition = 'all 1s'
    }

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

實現用滑鼠對小球進行移動

之後就是作業了

一個是實現 摁下回車 按鈕開始倒計時,計時結束 才可以點選按鈕

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="button" disabled="disabled">
<script >
   var btn = document.getElementsByTagName('input')[0]
   var i= 3;
   btn.value=i;
   var t;
   window.onload = function (e){
       document.onkeydown = function (e){
           if(e.keyCode == 13){
              t = setInterval(f,1000)
           }
       }
       function f(){
           --i
           btn.value=i;
           if(i == 0){
               console.log(123);
               clearInterval(t)
               btn.value='新年快樂'
               btn.disabled=false;
           }

       }
   }
</script>


</body>
</html>

第二個作業是 判斷輸入框裡的文字個數 實時反映到介面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="d1">
    還可以輸入100個數
</div>
<input type="text" style="height: 200px">
<script>
    window.onload = function (e){
        document.onkeydown = function (){
            var i=100;
            var d1 = document.getElementById('d1')
            var t1 = document.getElementsByTagName('input')[0]
            var a;
           i=i - t1.value.length;

            d1.innerText='還可以輸入'+i+'個字元';

        }
    }


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

ok 萬事大吉!!