第七节 DOM操作应用-高级

表格应用:

  获取:tBodies、tHead、tFoot、rows、cells

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>DOM高级应用-表格的便捷操作</title>
 6     <script>
 7         window.onload=function(){
 8             var oTab=document.getElementById('tab1');
 9             // a=oTab.getElementsByTagName('tbody')[0].getElementsByTagName('tr')[1].getElementsByTagName('td')[1].innerHTML;
10             // a=oTab.tBodies[0].getElementsByTagName('tr')[1].getElementsByTagName('td')[1].innerHTML;    //获取所有表格的简单操作,该句与上面代码相同的意义
11             // a=oTab.tBodies[0].rows[1].getElementsByTagName('td')[1].innerHTML;  //同上理,在获取到的表格下,获取该表格的某一行也有简单的操作,rows
12             a=oTab.tBodies[0].rows[1].cells[1].innerHTML;   //同理,cells是获取行中的所有单元格,cells[1]是获取该行中第二个单元格
13             alert(a);
14         }
15     </script>
16 </head>
17 <body>
18     <table id="tab1" border="1" width="500">
19         <thead><!--表头-->
20             <td>ID</td>
21             <td>姓名</td>
22             <td>年龄</td>
23         </thead>
24         <tbody>     <!--其实就算没有<tbody>这个标签,浏览器也会自动给我们的表格加上,所以我们在写表格的时候最好加上该标签!这样会显得代码比较严谨-->
25             <tr>
26                 <td>11111</td>
27                 <td>haohao</td>
28                 <td>26</td>
29             </tr>
30             <tr>
31                 <td>22222</td>
32                 <td>maomao</td>
33                 <td>25</td>
34             </tr>
35             <tr>
36                 <td>33333</td>
37                 <td>hanhan</td>
38                 <td>24</td>
39             </tr>
40             <tr>
41                 <td>44444</td>
42                 <td>zhizhi</td>
43                 <td>23</td>
44             </tr>
45         </tbody>
46     </table>
47 </body>
48 </html>
View Code

  需要注意的是,每个表格可以有好多tBody,即tBodies是一个数组,但是每个表格只能有一个tHead(表头)、tFoot(表尾),所以tHead、tFoot不是一个数组,而是直接的两个元素;相同的rows(行)、cells(元素/单元格)也表示两个数组。

  

  隔行变色:鼠标移入高亮 

 1 //表格样式还是上面的样式
 2         window.onload=function () {
 3             var oTab=document.getElementById('tab1');
 4 
 5             for (var i=0; i<oTab.tBodies[0].rows.length; i++){
 6             //注意:如果判断语句中没有tBodies[0],则系统会默认把thead(表头)也算做一行,所以千万别忘了tBodies
 7                 oTab.tBodies[0].rows[i].onmouseover=function () {   //鼠标移入,背景颜色变绿
 8                     this.style.background='green';
 9                 };
10                 oTab.tBodies[0].rows[i].onmouseout=function () {    //鼠标移出,背景颜色变白
11                     this.style.background='';
12                 };
13 
14                 if (i%2){    //系统默认1为True,0为False
15                     oTab.tBodies[0].rows[i].style.background="";
16                 } else {
17                     oTab.tBodies[0].rows[i].style.background="#ccc";
18                 }
19             }
20         };
21 //但是问题在于,移入变绿后,再移出,隔行变色也消失了,解决办法如下
22 
23 window.onload=function () {
24     var oTab=document.getElementById('tab1');
25     var oldColor='';
26 
27     for (var i=0; i<oTab.tBodies[0].rows.length; i++){
28     //注意:如果判断语句中没有tBodies[0],则系统会默认把thead(表头)也算做一行,所以千万别忘了tBodies
29         oTab.tBodies[0].rows[i].onmouseover=function () {   //鼠标移入,背景颜色变绿
30             oldColor=this.style.background;  //用于存放原来的颜色
31             this.style.background='green';
32         };
33         oTab.tBodies[0].rows[i].onmouseout=function () {    //鼠标移出,背景颜色变白
34             this.style.background=oldColor;
35         };
36 
37         if (i%2){    //系统默认1为True,0为False
38             oTab.tBodies[0].rows[i].style.background="";
39         } else {
40             oTab.tBodies[0].rows[i].style.background="#ccc";
41         }
42     }
43 };
View Code

 

  添加、删除表格中的一行:DOM方法的使用

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>DOM高级应用</title>
  6     <script>//表格的添加、删除一行
  7         window.onload=function () {
  8             // var oTab=document.getElementById('tab1');
  9             // var oBtn=document.getElementById('btn1');
 10             // var oName=document.getElementById('name');
 11             // var oAge=document.getElementById('age');
 12 
 13             // oBtn.onclick=function () {
 14             //     var oTr=document.createElement('tr');   //先创建一行
 15             //
 16             //     var oTd=document.createElement('td');   //再创建该行的列
 17             //     oTd.innerHTML=oTab.tBodies[0].rows.length+1;    //?
 18             //     oTr.appendChild(oTd);
 19             //
 20             //     var oTd=document.createElement('td');   //再创建该行的列
 21             //     oTd.innerHTML=oName.value;    //?
 22             //     oTr.appendChild(oTd);
 23             //
 24             //     var oTd=document.createElement('td');   //再创建该行的列
 25             //     oTd.innerHTML=oAge.value;    //?
 26             //     oTr.appendChild(oTd);
 27             //
 28             //     var oTd=document.createElement('td');   //再创建该行的列
 29             //     oTd.innerHTML='<a href="javascript:;">删除</a>';    //?
 30             //     oTr.appendChild(oTd);
 31             //
 32             //     oTd.getElementsByTagName('a')[0].onclick=function(){
 33             //         oTab.tBodies[0].removeChild(this.parentNode.parentNode);
 34             //     };
 35             //
 36             //     oTab.tBodies[0].appendChild(oTr);
 37             // };
 38 
 39             //此时,?处的问题就出现了,即在删除表格中用户添加的行时,其被删除下面的行的id并不会被改变,所以再次添加行时,
 40             //又从新开始计算行数而产生添加行的id值,这样就会出现id值相同的情况,而正常的情况下,某个人的id值是唯一的(当然
 41             //也有id值严格有序的,如有道云音乐中,删除歌单中的某一首歌,则下面的id值都会减一,来保证id的严格有序),所以在
 42             //删除某一行后,其id值将不会再出现,解决办法如下:
 43             var oTab=document.getElementById('tab1');
 44             var oBtn=document.getElementById('btn1');
 45             var oName=document.getElementById('name');
 46             var oAge=document.getElementById('age');
 47             var id=oTab.tBodies[0].rows.length+1;
 48 
 49             oBtn.onclick=function () {
 50                 var oTr=document.createElement('tr');   //先创建一行
 51 
 52                 var oTd=document.createElement('td');   //再创建该行的列
 53                 oTd.innerHTML=id++;    //?
 54                 oTr.appendChild(oTd);
 55 
 56                 var oTd=document.createElement('td');   //再创建该行的列
 57                 oTd.innerHTML=oName.value;    //?
 58                 oTr.appendChild(oTd);
 59 
 60                 var oTd=document.createElement('td');   //再创建该行的列
 61                 oTd.innerHTML=oAge.value;    //?
 62                 oTr.appendChild(oTd);
 63 
 64                 var oTd=document.createElement('td');   //再创建该行的列
 65                 oTd.innerHTML='<a href="javascript:;">删除</a>';    //?
 66                 oTr.appendChild(oTd);
 67 
 68                 oTd.getElementsByTagName('a')[0].onclick=function(){
 69                     oTab.tBodies[0].removeChild(this.parentNode.parentNode);
 70                 };
 71 
 72                 oTab.tBodies[0].appendChild(oTr);
 73             };
 74         };
 75     </script>
 76 </head>
 77 <body>
 78     姓名:<input id="name" type="text"/>
 79     年龄:<input id="age" type="text"/>
 80     <button id="btn1">添加</button>
 81     <table id="tab1" border="1" width="500">
 82         <thead><!--表头-->
 83             <td>ID</td>
 84             <td>姓名</td>
 85             <td>年龄</td>
 86             <td>操作</td>
 87         </thead>
 88         <tbody>     <!--其实就算没有<tbody>这个标签,浏览器也会自动给我们的表格加上,所以我们在写表格的时候最好加上该标签!这样会显得代码比较严谨-->
 89             <tr>
 90                 <td>1</td>
 91                 <td>haohao</td>
 92                 <td>26</td>
 93                 <td></td>
 94             </tr>
 95             <tr>
 96                 <td>2</td>
 97                 <td>maomao</td>
 98                 <td>25</td>
 99                 <td></td>
100             </tr>
101             <tr>
102                 <td>3</td>
103                 <td>hanhan</td>
104                 <td>24</td>
105                 <td></td>
106             </tr>
107             <tr>
108                 <td>4</td>
109                 <td>zhizhi</td>
110                 <td>23</td>
111                 <td></td>
112             </tr>
113         </tbody>
114     </table>
115 </body>
116 </html>
View Code

 

  搜索 :其实一般情况下搜索都是后台执行的,一般不用JS做搜索的工作,这里只是为了介绍思想

    版本1:基础版本——字符串比较

    版本2:忽略大小写——大小写转换

    版本3:模糊搜索——search的使用

       var str='abcdef'; //字符串的索引值从0开始
      
alert(str.search('c')); //找到并且返回字符串出现的位置,如果没有找到,返回-1

    版本4:多关键词——split

    高亮显示、筛选

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>DOM高级应用</title>
  6     <script>
  7         // //搜索---版本1:基础版本(字符串比较)
  8         // window.onload=function () {
  9         //     var oTab=document.getElementById('tab1');
 10         //     var oTxt=document.getElementById('name');
 11         //     var oBtn=document.getElementById('btn2');
 12         //
 13         //     oBtn.onclick=function () {
 14         //         for (var i=0; i<oTab.tBodies[0].rows.length; i++){
 15         //             if (oTab.tBodies[0].rows[i].cells[1].innerHTML==oTxt.value){
 16         //                 oTab.tBodies[0].rows[i].style.background='yellow';
 17         //             } else {
 18         //                 oTab.tBodies[0].rows[i].style.background='';
 19         //             }
 20         //         }
 21         //     };
 22         // };
 23 
 24         // //搜索---版本2:忽略大小写——大小写转换
 25         // window.onload=function () {
 26         //     var oTab=document.getElementById('tab1');
 27         //     var oTxt=document.getElementById('name');
 28         //     var oBtn=document.getElementById('btn2');
 29         //
 30         //     oBtn.onclick=function () {
 31         //         for (var i=0; i<oTab.tBodies[0].rows.length; i++){
 32         //             var sTab=oTab.tBodies[0].rows[i].cells[1].innerHTML;
 33         //             var sTxt=oTxt.value;
 34         //             if (sTab.toLowerCase()==sTxt.toLowerCase()){    //忽略大小写进行搜索
 35         //                 oTab.tBodies[0].rows[i].style.background='yellow';
 36         //             } else {
 37         //                 oTab.tBodies[0].rows[i].style.background='';
 38         //             }
 39         //         }
 40         //     };
 41         // };
 42 
 43         // //搜索---版本3:模糊搜索(在输入不完全的情况下,一样能搜索想要的事物)——search的使
 44         // // var str='abcdef';       //search()方法的使用
 45         // // alert(str.search('c'));     //返回值为:2 表示字符‘c’在字符串str中的位置(或索引值)为2;
 46         // // alert(str.search('de'));    //返回值为:3 表示字符串‘de’在字符串str中的位置是从3开始的。
 47         // // alert(str.search('g'));     //返回值为:-1表示所搜索的字符不在字符串str中。
 48         //
 49         // window.onload=function () {
 50         //     var oTab=document.getElementById('tab1');
 51         //     var oTxt=document.getElementById('name');
 52         //     var oBtn=document.getElementById('btn2');
 53         //
 54         //     oBtn.onclick=function () {
 55         //         for (var i=0; i<oTab.tBodies[0].rows.length; i++){
 56         //             var sTab=oTab.tBodies[0].rows[i].cells[1].innerHTML.toLowerCase();
 57         //             var sTxt=oTxt.value.toLowerCase();
 58         //             if (sTab.search(sTxt)!=-1){    //如果搜索的值在表格字符串中存在
 59         //                 oTab.tBodies[0].rows[i].style.background='yellow';
 60         //             } else {
 61         //                 oTab.tBodies[0].rows[i].style.background='';
 62         //             }
 63         //         }
 64         //     };
 65         // };
 66         // 需要注意的是模糊搜索,如果你输入的字符可以在表格的多个行中找到匹配的值,系统会默认把所有符合条件的行 标出。
 67 
 68         //搜索---版本4:多关键词--split()方法
 69         // var str='abc 123 ert';
 70         // var arr=str.split(' '); //用空格切分字符串
 71         // alert(arr);     //返回值为:abc,123,ert 表示字符串被切分成三段,此时arr.length=3
 72         window.onload=function () {
 73             var oTab=document.getElementById('tab1');
 74             var oTxt=document.getElementById('name');
 75             var oBtn=document.getElementById('btn2');
 76 
 77             oBtn.onclick=function () {
 78                 for (var i=0; i<oTab.tBodies[0].rows.length; i++){
 79                     var sTab=oTab.tBodies[0].rows[i].cells[1].innerHTML.toLowerCase();
 80                     var sTxt=oTxt.value.toLowerCase();
 81 
 82                     var arr=sTxt.split(' ');    //这里假设用户输入的关键字是以空格隔开的,所以以空格切分
 83 
 84                     //oTab.tBodies[0].rows[i].style.background='';  //控制高亮
 85             oTab..display='none';  //控制筛选
 86 
 87                     for (var j=0; j<arr.length; j++){
 88                         if (sTab.search(arr[j])!=-1){    //如果搜索的值在表格字符串中存在
 89                             //oTab.tBodies[0].rows[i].style.background='yellow';  //控制高亮
 90                 oTab.tBodies[0].rows[i].style.display='block';  //控制筛选
 91                         }
 92                     }
 93                 }
 94             };
 95         };
 96         //该方法实现了,多关键字的同时搜索,不过这里假设用户输入的多个关键字是以空格隔开的
 97     </script>
 98 </head>
 99 <body>
100     姓名:<input id="name" type="text"/>   
101     <button id="btn2">搜索</button>(请输入需要搜索的name值!)
102     <table id="tab1" border="1" width="500">
103         <thead><!--表头-->
104             <td>ID</td>
105             <td>姓名</td>
106             <td>年龄</td>
107             <td>操作</td>
108         </thead>
109         <tbody>     <!--其实就算没有<tbody>这个标签,浏览器也会自动给我们的表格加上,所以我们在写表格的时候最好加上该标签!这样会显得代码比较严谨-->
110             <tr>
111                 <td>1</td>
112                 <td>haohao</td>
113                 <td>26</td>
114                 <td></td>
115             </tr>
116             <tr>
117                 <td>2</td>
118                 <td>maomao</td>
119                 <td>25</td>
120                 <td></td>
121             </tr>
122             <tr>
123                 <td>3</td>
124                 <td>hanhan</td>
125                 <td>24</td>
126                 <td></td>
127             </tr>
128             <tr>
129                 <td>4</td>
130                 <td>zhizhi</td>
131                 <td>23</td>
132                 <td></td>
133             </tr>
134         </tbody>
135     </table>
136 </body>
137 </html>
View Code

 

  排序:<li>、<img>等等

    移动<li>

    元素排序:转换——排序——插入

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>移动li标签</title>
 6     <style>
 7         #ul1{background: green;}
 8         #ul2{background: yellow;}
 9     </style>
10     <script>
11         window.onload=function () {
12             var oUl1=document.getElementById('ul1');
13             var oUl2=document.getElementById('ul2');
14             var oBtn=document.getElementById('btn1');
15 
16             oBtn.onclick=function () {
17                 var oLi=oUl1.children[0];
18 
19                 // //移动li的实现
20                 // // oUl1.removeChild(oLi);   //即使没有此句,效果依然没有影响
21                 // oUl2.appendChild(oLi);
22                 // //appendChild()  功能完整版:1.先把元素从原有父级上删掉,添加到新的父级里
23 
24                 //循环摆放li的实现
25                 oUl1.appendChild(oLi);
26             };
27         };
28     </script>
29 </head>
30 <body>
31     <ul id="ul1">
32         <li>1</li>
33         <li>2</li>
34         <li>2</li>
35         <li>3</li>
36     </ul>
37     <button id="btn1">移动</button>
38     <ul id="ul2">
39         <li>1</li>
40         <li>2</li>
41         <li>2</li>
42         <li>3</li>
43     </ul>
44 </body>
45 </html>
View Code

 

    简单的<li>标签排序

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>移动li标签</title>
 6     <style>
 7         #ul1{background: green;}
 8     </style>
 9     <script>
10         window.onload=function () {
11             var oUl1=document.getElementById('ul1');
12             var oBtn=document.getElementById('btn1');
13 
14             oBtn.onclick=function () {
15                 var aLi=oUl1.getElementsByTagName('li');
16                 // aLi.sort(); //报错,原因:之前说aLi是一个数组(Array),但其实aLi严格意义来说,
17                 // 并不能算是是一个数组(Array),而sort()是数组特有的一个排序方法;
18                 // aLi其实是一个元素“集合”,和数组相似,有length,可以用“[]”,但是没有sort、join等数组的函数,所以报错
19                 var arr=[];
20                 for (var i = 0; i<aLi.length; i++){
21                     arr[i]=aLi[i];
22                 }
23                 arr.sort(function (li1, li2) {  //排序需要一个比较函数,该函数有两个参数
24                     var n1=parseInt(li1.innerHTML);
25                     var n2=parseInt(li2.innerHTML);
26 
27                     return n1-n2;
28                 });
29                 for (var j=0; j<arr.length; j++){   //返回第i个值应该是多少?
30                     // alert(arr[j].innerHTML);    // 返回值是“3 10 11 ...” 正确
31                     alert('该把'+arr[j].innerHTML+'插入到最后了!');
32                     oUl1.appendChild(arr[j]);
33                 }
34             };
35         };
36     </script>
37 </head>
38 <body>
39     <button id="btn1">排序</button>
40     <ul id="ul1">
41         <li>10</li>
42         <li>21</li>
43         <li>25</li>
44         <li>3</li>
45         <li>11</li>
46         <li>28</li>
47         <li>26</li>
48         <li>30</li>
49     </ul>
50 </body>
51 </html>
View Code

 

  表格排序的实现:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>DOM高级应用</title>
 6     <script>
 7         window.onload=function () {
 8             var oTab=document.getElementById('tab1');
 9             var oBtn=document.getElementById('btn1');
10 
11             oBtn.onclick=function () {
12                 var arr=[];
13                 
14                 for (var i=0; i<oTab.tBodies[0].rows.length; i++){
15                     arr[i]=oTab.tBodies[0].rows[i];  //把所有元素集合中的值,添加到数组中                                        
16                 }
17                 arr.sort(function (tr1, tr2) {  //排序函数
18                     var n1=parseInt(tr1.cells[0].innerHTML);
19                     var n2=parseInt(tr2.cells[0].innerHTML);
20                     return n1-n2;
21                 });
22                 
23                 for (var i=0; i<arr.length; i++){
24                     alert('该把'+arr[i].innerHTML+'插入到最后了!');
25                     oTab.tBodies[0].appendChild(arr[i]);
26                 }
27             };
28         };
29         //该方法实现了,多关键字的同时搜索,不过这里假设用户输入的多个关键字是以空格隔开的
30     </script>
31 </head>
32 <body>
33     <button id="btn1">排序</button>
34     <table id="tab1" border="1" width="500">
35         <thead><!--表头-->
36             <td>ID</td>
37             <td>姓名</td>
38             <td>年龄</td>
39             <td>操作</td>
40         </thead>
41         <tbody>     <!--其实就算没有<tbody>这个标签,浏览器也会自动给我们的表格加上,所以我们在写表格的时候最好加上该标签!这样会显得代码比较严谨-->
42             <tr>
43                 <td>3</td>
44                 <td>haohao1</td>
45                 <td>26</td>
46                 <td></td>
47             </tr>
48             <tr>
49                 <td>2</td>
50                 <td>maomao1</td>
51                 <td>25</td>
52                 <td></td>
53             </tr>
54             <tr>
55                 <td>5</td>
56                 <td>hanhan1</td>
57                 <td>24</td>
58                 <td></td>
59             </tr>
60             <tr>
61                 <td>4</td>
62                 <td>zhizhi1</td>
63                 <td>23</td>
64                 <td></td>
65             </tr>
66             <tr>
67                 <td>1</td>
68                 <td>haohao2</td>
69                 <td>26</td>
70                 <td></td>
71             </tr>
72             <tr>
73                 <td>6</td>
74                 <td>maomao2</td>
75                 <td>25</td>
76                 <td></td>
77             </tr>
78             <tr>
79                 <td>8</td>
80                 <td>hanhan2</td>
81                 <td>24</td>
82                 <td></td>
83             </tr>
84             <tr>
85                 <td>7</td>
86                 <td>zhizhi2</td>
87                 <td>23</td>
88                 <td></td>
89             </tr>
90         </tbody>
91     </table>
92 </body>
93 </html>
View Code

 

表单应用

  表单基础知识:

    什么是表单:

      向服务器提交数据,比如:用户注册

    action:提交到哪里

  表单事件:

    onsubmit:提交时发生

    onreset:重置时发生

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>表单事件</title>
 6     <script>
 7         window.onload=function () {
 8             var oForm=document.getElementById('form1');
 9 
10             oForm.onsubmit=function () {    //提交时的提示
11                 alert('确认提交!');
12             };
13             oForm.onreset=function () {
14                 alert('已清空!');
15             };
16         };
17     </script>
18 </head>
19 <body>
20     <!--表单存在的目的,其实就是为了向服务器提供数据-->
21     <form id="form1" action="http://...">
22         用户名:<input type="text" name="use"/><br/><!--而这个name相当于前端的id,前端靠id来查找元素,而后台就是通过它
23         (name)来查找元素的-->
24         密码:<input type="password" name="pass"/>
25         <input type="submit"/><!--上面form行间元素“action就是提交的位置”-->
26         <input type="reset">
27     </form>
28 </body>
29 </html>
View Code

 

 

  表单内容验证:

    阻止用户输入非法字符:阻止事件

    输入时、失去焦点是验证:onkeyup、onblur

    提交时检查:onsubmit

    *后台数据检查:

 

posted @ 2018-12-29 20:35  漠上  阅读(161)  评论(0编辑  收藏  举报