JS學習筆記07-表格與表單應用

一、表格應用

以下測試均採用該HTML框架:

<body>
    <table id="tab1" border="1px" style="width: 500px;">
        <thead>
            <td>ID</td>
            <td>姓名</td>
            <td>年齡</td>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>張三</td>
                <td>25</td>
            </tr>
            <tr>
                <td>2</td>
                <td>李四</td>
                <td>35</td>
            </tr>
            <tr>
                <td>3</td>
                <td>王五</td>
                <td>31</td>
            </tr>
            <tr>
                <td>4</td>
                <td>馬六</td>
                <td>25</td>
            </tr>
            <tr>
                <td>5</td>
                <td>小明</td>
                <td>29</td>
            </tr>
        </tbody>
    </table>
</body>

1.1 獲取

在傳統的JS當中如果我們需要獲取一個單元格的內容,如果不加ID我們會使用下面這種方法:
先選中table,再選中tbody,再選中tr,再選中td,都是使用的getElementByTagName

<script>
    window.onload=function(){
        var tab = document.getElementById('tab1');
        //李四
        alert(tab.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[1].getElementsByTagName('td')[1].innerHTML);
    }
</script>

但是JS中有專門針對選擇表格的屬性:例如

alert(tab.tBodies[0].rows[1].cells[1].innerHTML);

效果四一模一樣的,得出以下結論:

1.1.1 .tBodies[] 選中第幾個tbody

1.1.2 .rows[] 選中第幾個tr

1.1.3 .cells[] 選中第幾個td

另外,啊hi有

1.1.4 .tHead 選中表頭

1.1.5 .tFoot 選中表尾

需要注意的是,這表格只有一個表頭和表尾,所以沒有複數S 而其他三個有複數S,所以他們是數組,而這兩個只是單一的。

1.2 隔行變色

需要注意的是鼠標移出的時候。要返回原來的顏色,此處用了一個變量來保存當前對象的顏色

<script>
    window.onload=function(){
        var tab = document.getElementById('tab1');
        var oldColor = '';

        for(var i=0;i<tab.tBodies[0].rows.length;i++){
            tab.tBodies[0].rows[i].onmouseover=function(){
                oldColor=this.style.background;
                this.style.background='green';
            }
            tab.tBodies[0].rows[i].onmouseout=function(){
                this.style.background=oldColor;
            }
            if(i%2 == 0){
                tab.tBodies[0].rows[i].style.background= '#ccc';
            }else{
                tab.tBodies[0].rows[i].style.background= 'white';
            }
        }
    }
</script>

效果:
在這裏插入圖片描述

1.3 添加、刪除一行

添加使用方法 .createElement();
刪除使用方法 .removeChild();

1.4 搜索 高亮顯示

思路:使用循環判斷,表格內的元素是否與搜索框內的相等,如果相等 則設置background,不相等 則設置爲空格。

<script>
    window.onload=function(){
        var tab=document.getElementById('tab1');
        var txt = document.getElementById('name');
        var btn = document.getElementById('btn1');

        btn.onclick=function(){
            for(var i=0;i<tab.tBodies[0].rows.length;i++){
                var tab_text = tab.tBodies[0].rows[i].cells[1].innerHTML;
                var input_text = txt.value;
                if(tab_text==input_text){
                    tab.tBodies[0].rows[i].style.background='green';
                }else{
                    tab.tBodies[0].rows[i].style.background='';
                }
            }
        }
        
    }
</script>

1.4.1 .toLowerCase() 全部轉換爲小寫

此處我們把兩邊都轉化爲小寫,就可以忽略大小寫的問題了

<script>
    window.onload=function(){
        var tab=document.getElementById('tab1');
        var txt = document.getElementById('name');
        var btn = document.getElementById('btn1');

        btn.onclick=function(){
            for(var i=0;i<tab.tBodies[0].rows.length;i++){
                var tab_text = tab.tBodies[0].rows[i].cells[1].innerHTML;
                var input_text = txt.value;
                if(tab_text.toLowerCase()==input_text.toLowerCase()){
                    tab.tBodies[0].rows[i].style.background='green';
                }else{
                    tab.tBodies[0].rows[i].style.background='';
                }
            }
        }
        
    }
</script>

在這裏插入圖片描述

1.4.2 .search() 模糊搜索

實例:

<script>
    var str = 'abcdefghijklmnopqrstuvwxyz';
    alert(str.search('e'));//4
    alert(str.search('bcde'));//1
    alert(str.search('test'));//-1
</script>

1.4.3 split() 把字符串拆分爲數組

語法: .spalit(參數)
說明: split把對應的字符串按照指定的參數拆分成數組
例如:

<script>
    var str='abc 123 張三';

    var arr = str.split(' ');
    alert(arr.length);//3
    alert(arr);//abc,123,張三
</script>

實例:
此處我們用於匹配 空格間隔 的輸入

<body>
    姓名:<input id="name" type="text">
    <input id="btn1" type="button" value="搜索">
    <table id="tab1" border="1px" style="width: 500px;">
        <thead>
            <td>ID</td>
            <td>姓名</td>
            <td>年齡</td>
            <td>操作</td>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>Blue</td>
                <td>25</td>
                <td><a href="javascript:;">刪除</a></td>
            </tr>
            <tr>
                <td>2</td>
                <td>張三</td>
                <td>35</td>
                <td><a href="javascript:;">刪除</a></td>
            </tr>
            <tr>
                <td>3</td>
                <td>李四</td>
                <td>35</td>
                <td><a href="javascript:;">刪除</a></td>
            </tr>
            <tr>
                <td>4</td>
                <td>王五</td>
                <td>31</td>
                <td><a href="javascript:;">刪除</a></td>
            </tr>
            <tr>
                <td>5</td>
                <td>馬六</td>
                <td>25</td>
                <td><a href="javascript:;">刪除</a></td>
            </tr>
            <tr>
                <td>6</td>
                <td>李偉</td>
                <td>29</td>
                <td><a href="javascript:;">刪除</a></td>
            </tr>
            <tr>
                <td>7</td>
                <td>趙四</td>
                <td>29</td>
                <td><a href="javascript:;">刪除</a></td>
            </tr>
        </tbody>
    </table>
</body>

<script>
    window.onload=function(){
        var tab=document.getElementById('tab1');
        var txt = document.getElementById('name');
        var btn = document.getElementById('btn1');

        btn.onclick=function(){
            for(var i=0;i<tab.tBodies[0].rows.length;i++){

                var tab_text = tab.tBodies[0].rows[i].cells[1].innerHT![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200427215952460.gif)
ML.toLowerCase();//轉換爲小寫
                var input_text = txt.value.toLowerCase();
                var arr = input_text.split(' ');//根據空格拆分 匹配空格間隔的輸入

                tab.tBodies[0].rows[i].style.background='';
                for(var j=0;j<arr.length;j++){
                    if(tab_text.search(arr[j])!=-1){
                        tab.tBodies[0].rows[i].style.background='green';
                    }                
                }                
            }
        }        
    }
</script>

效果圖:
在這裏插入圖片描述

1.5 搜索 篩選

設計思路:點擊搜索後,先讓所有單元格隱藏,只有滿足要求才顯示。

<script>
    window.onload=function(){
        var tab=document.getElementById('tab1');
        var txt = document.getElementById('name');
        var btn = document.getElementById('btn1');

        btn.onclick=function(){
            for(var i=0;i<tab.tBodies[0].rows.length;i++){

                var tab_text = tab.tBodies[0].rows[i].cells[1].innerHTML.toLowerCase();//轉換爲小寫
                var input_text = txt.value.toLowerCase();
                var arr = input_text.split(' ');//根據空格拆分 匹配空格間隔的輸入

                tab.tBodies[0].rows[i].style.display='none';
                for(var j=0;j<arr.length;j++){
                    if(tab_text.search(arr[j])!=-1){
                        tab.tBodies[0].rows[i].style.display='block';
                    }                
                }                
            }
        }        
    }
</script>

在這裏插入圖片描述

1.5 li的排序

1.5.1 li移動到另一個li

思路:首先需要明白,appendChild是分兩步走的,第一步 是把元素從原有父級刪除,第二步纔是添加到新的父級
1、先把所有的li獲取到,然後使用sort方法,把li裏邊的數字排序。
2、把已經排序好的添加到當前ul的末尾。實際上是移動,先把最小的添加到末尾,再依次添加

<script>
    window.onload=function(){
        var ul1=document.getElementById('ul1');
        var ul2=document.getElementById('ul2');
        var btn1=document.getElementById('btn1');

        btn1.onclick=function(){
            var ul_li = ul1.getElementsByTagName('li');

            // aLi.sort();//報錯

            var arr=[];

            for(var i =0;i<ul_li.length;i++){
                arr[i]=ul_li[i];
            }
            //這裏數組裏邊已經排好序了,但是還沒有更新ul裏邊的位置
            arr.sort(function(li1,li2){
                var n1=parseInt(li1.innerHTML);
                var n2=parseInt(li2.innerHTML);

                return n1-n2;
            });
            //這裏按照從小到大的順序,追加到數組裏邊
            for(var i=0;i<arr.length;i++){
                //.appendChild方法 1、先把元素從原有父級上刪除 2、再添加到新的父級 (相當於移動)
                ul1.appendChild(arr[i]);
            }
        }
    }
</script>

效果圖:
在這裏插入圖片描述

1.6 表格排序

原理同上。

<body>
    <input id="btn1" type="button" value="排序">
    <table id="tab1" border="1px" style="width: 500px;">
        <thead>
            <td>ID</td>
            <td>姓名</td>
            <td>年齡</td>
            <td>操作</td>
        </thead>
        <tbody>
            <tr>
                <td>3</td>
                <td>Blue</td>
                <td>25</td>
                <td><a href="javascript:;"></a></td>
            </tr>
            <tr>
                <td>2</td>
                <td>張三</td>
                <td>35</td>
                <td><a href="javascript:;"></a></td>
            </tr>
            <tr>
                <td>4</td>
                <td>李四</td>
                <td>35</td>
                <td><a href="javascript:;"></a></td>
            </tr>
            <tr>
                <td>1</td>
                <td>王五</td>
                <td>31</td>
                <td><a href="javascript:;"></a></td>
            </tr>
            <tr>
                <td>7</td>
                <td>馬六</td>
                <td>25</td>
                <td><a href="javascript:;"></a></td>
            </tr>
            <tr>
                <td>6</td>
                <td>李偉</td>
                <td>29</td>
                <td><a href="javascript:;"></a></td>
            </tr>
            <tr>
                <td>5</td>
                <td>趙四</td>
                <td>29</td>
                <td><a href="javascript:;"></a></td>
            </tr>
        </tbody>
    </table>
</body>
<script>
    window.onload=function(){
        var tab=document.getElementById('tab1');
        var btn = document.getElementById('btn1'); 

        btn.onclick=function(){
            var arr=[];

            for(var i=0;i<tab.tBodies[0].rows.length;i++){
                arr[i]=tab.tBodies[0].rows[i];
            }
            arr.sort(function(tr1,tr2){
                var n1 = parseInt(tr1.cells[0].innerHTML);
                var n2 = parseInt(tr2.cells[0].innerHTML);

                return n1-n2;
            });

            for(var i=0;i<arr.length;i++){
                tab.tBodies[0].appendChild(arr[i]);
            }
        }

    }
</script>

效果:
在這裏插入圖片描述

二、表單應用

2.1 onsubmit();

當表單提交是的時候觸發 onsubmit();

2.2 onreset();

當表單發生重置的時候觸發 onreset();

<body>
    <form id="form" action="https://www.baidu.com">
        <!-- 後臺是通過name來獲取數據的 -->
        用戶名:<input type="text" name="user">
        密碼: <input type="password" name="pwd">
        <input type="submit" value="提交">
        <input type="reset" value="重置">
    </form>
</body>

<script>
    window.onload=function(){
        var form = document.getElementById('form');

        form.onsubmit=function (){
            alert('submit');
        }
        form.onreset=function (){
            alert('reset');
        }
    }
</script>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章