web前端【第八篇】JS的DOM對象二
阿新 • • 發佈:2018-02-20
purple 事件類型 湖北省 常用 web -h png 自己 string
onload示例二
一、節點操作
創建節點:var ele_a = document.createElement(‘a‘);
添加節點:ele_parent.appendChild(ele_img);
刪除節點:ele_parent.removeChild(ele_p);
替換節點:ele_parent.replaceChild(新標簽,舊標簽);
//具體的節點操作實例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>節點操作</title> <style> .c1 { width: 300px; height: 200px; border: 1px solid red; } </style> </head> <body> <div class="c1"> <p id="p1">年後</p> <p id="p2">hello</p> </div> <button class="addBtn">ADD</button> <button class="delBtn">DEL</button> <button class="replaceBtn">Replace</button> <ul> <li>創建節點:var ele_a = document.createElement(‘a‘);</li> <li>添加節點:ele_parent.appendChild(ele_img);</li> <li>刪除節點:ele_parent.removeChild(ele_p);</li> <li>替換節點:ele_parent.replaceChild(新標簽,舊標簽);</li> </ul> <table border="1"> <tbody id="t1"> <tr> <td><input type="checkbox"></td> <td><input type="text"></td> <td><button class="delbtn">del1</button></td> </tr> <tr> <td><input type="checkbox"></td> <td><input type="text"></td> <td><button class="delbtn">del2</button></td> </tr> <tr> <td><input type="checkbox"></td> <td><input type="text"></td> <td><button class="delbtn">del3</button></td> </tr> <tr> <td><input type="checkbox"></td> <td><input type="text"></td> <td><button class="delbtn">del4</button></td> </tr> </tbody> </table> <script> var ele_add = document.getElementsByClassName(‘addBtn‘)[0]; var ele_del = document.getElementsByClassName(‘delBtn‘)[0]; var ele_repleace = document.getElementsByClassName(‘replaceBtn‘)[0]; console.log(ele_add); //綁定的添加節點的事件 ele_add.onclick = function () { //先創建一個標簽 var ele_a = document.createElement(‘a‘); console.log(ele_a); //<a></a> ele_a.innerHTML = ‘點擊‘; //<a>點擊</a> ele_a.href = ‘http://www.baidu.com‘; //<a href=‘http://www.baidu.com‘>點擊</a> //先創建一個標簽 var ele_img = document.createElement(‘img‘); ele_img.src = ‘1.png‘; ele_img.width = 50; ele_img.height = 50; //找到父標簽 var ele_parent = document.getElementsByClassName(‘c1‘)[0]; //然後添加 ele_parent.appendChild(ele_a); ele_parent.appendChild(ele_img); }; //綁定的刪除節點的事件 ele_del.onclick = function () { //先獲取要刪除的元素 var ele_p = document.getElementById(‘p1‘); //獲取它的父元素 var ele_parent = document.getElementsByClassName(‘c1‘)[0]; //然後刪除(註意是父元素刪除子元素) ele_parent.removeChild(ele_p) }; //綁定的替換節點的事件 ele_repleace.onclick = function () { //找被替換的標簽(舊標簽) var ele_p = document.getElementById(‘p2‘); //創建一個替換後的標簽(新標簽) var ele_img = document.createElement(‘img‘); ele_img.src = ‘2.png‘; ele_img.width = 100; ele_img.height = 50; //找到父節點 var ele_parent = document.getElementsByClassName(‘c1‘)[0]; //做替換(父節點替換子節點中的某一個節點):相當於一次刪除加一次添加 ele_parent.replaceChild(ele_img, ele_p); } </script> <script> //綁定刪除節點的事件 var ele_dels = document.getElementsByClassName(‘delbtn‘); for(var i=0;i<ele_dels.length;i++){ ele_dels[i].onclick = function () { //獲取刪除的元素 var ele_tr = this.parentElement.parentElement; // console.log(ele_tr) //找到父節點 var ele_tbody_parent =document.getElementById(‘t1‘); //然後刪除 ele_tbody_parent.removeChild(ele_tr) } } </script> </body> </html>
事件類型
onclick 當用戶點擊某個對象時調用的事件句柄。 ondblclick 當用戶雙擊某個對象時調用的事件句柄。 onfocus 元素獲得焦點。 練習:輸入框 onblur 元素失去焦點。 應用場景:用於表單驗證,用戶離開某個輸入框時,代表已經輸入完了,我們可以對它進行驗證. onchange 域的內容被改變。 應用場景:通常用於表單元素,當元素內容被改變時觸發.(三級聯動) onkeydown 某個鍵盤按鍵被按下。 應用場景: 當用戶在最後一個輸入框按下回車按鍵時,表單提交. onkeypress 某個鍵盤按鍵被按下並松開。 onkeyup 某個鍵盤按鍵被松開。 onload 一張頁面或一幅圖像完成加載。 onmousedown 鼠標按鈕被按下。 onmousemove 鼠標被移動。 onmouseout 鼠標從某元素移開。 onmouseover 鼠標移到某元素之上。 onmouseleave 鼠標從元素離開 onselect 文本被選中。 onsubmit 確認按鈕被點擊。
二、onload事件
onload 屬性開發中 只給 body元素加.這個屬性的觸發 標誌著 頁面內容被加載完成.應用場景: 當有些事情我們希望頁面加載完立刻執行,那麽可以使用該事件屬性.
什麽時候加載完什麽時候觸發(如果你想把script放在body上面去,就用到onload事件了)
onload事件(基於節點操作的修改)<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>節點操作</title> <style> .c1 { width: 300px; height: 200px; border: 1px solid red; } </style> <script> //如果要把script寫在body的上面就可以用onload事件 //onload什麽時候加載完什麽時候觸發這個事件 window.onload = function () { var ele_add = document.getElementsByClassName(‘addBtn‘)[0]; var ele_del = document.getElementsByClassName(‘delBtn‘)[0]; var ele_repleace = document.getElementsByClassName(‘replaceBtn‘)[0]; console.log(ele_add); //綁定的添加節點的事件 ele_add.onclick = function () { //先創建一個標簽 var ele_a = document.createElement(‘a‘); console.log(ele_a); //<a></a> ele_a.innerHTML = ‘點擊‘; //<a>點擊</a> ele_a.href = ‘http://www.baidu.com‘; //<a href=‘http://www.baidu.com‘>點擊</a> //先創建一個標簽 var ele_img = document.createElement(‘img‘); ele_img.src = ‘1.png‘; ele_img.width = 50; ele_img.height = 50; //找到父標簽 var ele_parent = document.getElementsByClassName(‘c1‘)[0]; //然後添加 ele_parent.appendChild(ele_a); ele_parent.appendChild(ele_img); }; //綁定的刪除節點的事件 ele_del.onclick = function () { //先獲取要刪除的元素 var ele_p = document.getElementById(‘p1‘); //獲取它的父元素 var ele_parent = document.getElementsByClassName(‘c1‘)[0]; //然後刪除(註意是父元素刪除子元素) ele_parent.removeChild(ele_p) }; //綁定的替換節點的事件 ele_repleace.onclick = function () { //找被替換的標簽(舊標簽) var ele_p = document.getElementById(‘p2‘); //創建一個替換後的標簽(新標簽) var ele_img = document.createElement(‘img‘); ele_img.src = ‘2.png‘; ele_img.width = 100; ele_img.height = 50; //找到父節點 var ele_parent = document.getElementsByClassName(‘c1‘)[0]; //做替換(父節點替換子節點中的某一個節點):相當於一次刪除加一次添加 ele_parent.replaceChild(ele_img, ele_p); }; //表格綁定刪除節點的事件 var ele_dels = document.getElementsByClassName(‘delbtn‘); for (var i = 0; i < ele_dels.length; i++) { ele_dels[i].onclick = function () { //獲取刪除的元素 var ele_tr = this.parentElement.parentElement; // console.log(ele_tr) //找到父節點 var ele_tbody_parent = document.getElementById(‘t1‘); //然後刪除 ele_tbody_parent.removeChild(ele_tr) } } } </script> </head> <body> <div class="c1"> <p id="p1">年後</p> <p id="p2">hello</p> </div> <button class="addBtn">ADD</button> <button class="delBtn">DEL</button> <button class="replaceBtn">Replace</button> <ul> <li>創建節點:var ele_a = document.createElement(‘a‘);</li> <li>添加節點:ele_parent.appendChild(ele_img);</li> <li>刪除節點:ele_parent.removeChild(ele_p);</li> <li>替換節點:ele_parent.replaceChild(新標簽,舊標簽);</li> </ul> <table border="1"> <tbody id="t1"> <tr> <td><input type="checkbox"></td> <td><input type="text"></td> <td> <button class="delbtn">del1</button> </td> </tr> <tr> <td><input type="checkbox"></td> <td><input type="text"></td> <td> <button class="delbtn">del2</button> </td> </tr> <tr> <td><input type="checkbox"></td> <td><input type="text"></td> <td> <button class="delbtn">del3</button> </td> </tr> <tr> <td><input type="checkbox"></td> <td><input type="text"></td> <td> <button class="delbtn">del4</button> </td> </tr> </tbody> </table> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script> /* window.onload=function(){ var ele=document.getElementById("ppp"); ele.onclick=function(){ alert(123) }; }; */ function fun() { var ele=document.getElementById("ppp"); ele.onclick=function(){ alert(123) }; } </script> </head> <body onload="fun()"> <p id="ppp">hello p</p> </body> </html>
三、onkeydown事件
Event 對象:Event 對象代表事件的狀態,比如事件在其中發生的元素、鍵盤按鍵的狀態、鼠標的位置、鼠標按鈕的狀態。
事件通常與函數結合使用,函數不會在事件發生前被執行!event對象在事件發生時系統已經創建好了,並且會在事件函數被調用時傳給事件函數.我們獲得僅僅需要接收一下即可.比如onkeydown,我們想知道哪個鍵被按下了,需要問下event對象的屬性,這裏就時KeyCode.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="text" class="test"> <input type="text" id="t1"/> <script> //測試event對象 var ele = document.getElementsByClassName(‘test‘)[0]; // event :每次觸發事件時所有的狀態信息 // event.keyCode :保存著所有的狀態信息 ele.onkeydown =function (event) { // onkeydown按下鍵盤觸發的事件 console.log(event); console.log(event.keyCode); if (event.keyCode==13){ //按回車就會彈出 alert(666) } } </script> <script type="text/javascript"> var ele=document.getElementById("t1"); ele.onkeydown=function(e){ e=e||window.event; var keynum=e.keyCode; var keychar=String.fromCharCode(keynum); // console.log(keynum); //每次鍵盤敲下的狀態信息 // console.log(keychar); //輸入的字符 // alert(keynum); // alert(keychar) //你鍵盤輸入的字符 }; </script> </body> </html>
四、onsubmit事件
當表單在提交時觸發. 該屬性也只能給form元素使用.應用場景: 在表單提交前驗證用戶輸入是否正確.如果驗證失敗.在該方法中我們應該阻止表單的提交.
onsubmit<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>onsubmit事件</title> <!--onsubmit事件:確定按鈕被點擊--> <!--在表單提交前驗證用戶輸入是否正確.如果驗證失敗.在該方法中我們應該阻止表單的提交.--> <!--提交按鈕本身就有一個默認事件(你點擊提交的時候就會把數據發過去)--> </head> <body> <form action="" id="submit"> <p>姓名:<input type="text" class="name"></p> <p>年齡:<input type="text" class="age"></p> <input type="submit"> </form> <input type="text" class="test"> <script> var ele_form = document.getElementById(‘submit‘); var ele_name = document.getElementsByClassName(‘name‘)[0]; var ele_age = document.getElementsByClassName(‘age‘)[0]; ele_form.onsubmit = function (event) { var username = ele_name.value; var age = ele_age.value; alert(username); alert(age); if (username==‘haiyan‘){ //阻止默認事件的兩種方式 // 方式一: // return false; // 方式二 // 給函數給一個形參,這個形參寫什麽都行,一般我們寫成event event.preventDefault() //阻止默認事件(表單的提交) } } </script> <script> //測試event對象 var ele = document.getElementsByClassName(‘test‘)[0]; // event :每次觸發事件時所有的狀態信息 // event.keyCode :保存著所有的狀態信息 ele.onkeydown =function (event) { // onkeydown按下鍵盤觸發的事件 console.log(event); console.log(event.keyCode); if (event.keyCode==13){ //按回車就會彈出 alert(666) } } </script> </body> </html>
五、事件傳播
事件傳播<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>事件傳播</title> <style> .box1 { width: 300px; height: 300px; background-color: rebeccapurple; } .box2{ width: 150px; height: 150px; background-color: yellow; } </style> </head> <body> <div class="box1"> <div class="box2"></div> </div> <script> //因為盒子1是盒子2的父親,所以當給父親綁定一個事件,給兒子也綁定一個事件,就像 // 繼承一樣,兒子會繼承父親的事件,所以現在運行的時候如果點擊盒子2,會把自己的是事件和 // 父親的事件都執行了。所以如果只想讓兒子執行自己的事件,那麽就得阻止發生事件傳播 var ele1 = document.getElementsByClassName(‘box1‘)[0]; var ele2 = document.getElementsByClassName(‘box2‘)[0]; ele1.onclick = function () { alert(123) }; ele2.onclick = function (event) { alert(456); console.log(event); console.log(event.keyCode); // 阻止事件傳播的方式 event.stopPropagation(); }; </script> </body> </html>
六、seach實例
模擬placeholder屬性的功能
<input type="text" placeholder="username" id="submit">
placeholder和value的區別:seach示例
placeholder:只是一個提示功能,不傳值。
value:是一個默認的值,如果你的輸入框中不寫數據的時候,它會把默認的數據發過去
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>模擬placeholder屬性的功能</title> </head> <body> <input type="text" placeholder="username" id="submit"> <input type="text" value="username" id="submit1"> <script> // var ele = document.getElementById(‘submit1‘); var ele = document.getElementById(‘submit1‘); ele.onfocus = function () { //先獲取焦點,點擊輸入框就獲取到焦點,光標一上去就把值設成空 this.value="" }; ele.onblur = function () { // 當光標不點擊那個輸入框的時候就失去焦點了 //當失去焦點的時候,判斷當前的那個值是不是為空,是否含有空格 // 如果為空或者有空格,用trim()去掉空格。然後賦值為username if (this.value.trim()==""){ this.value=‘username‘ } } </script> </body> </html>
七、onchange事件
onchange<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>onchange事件</title> </head> <body> <select name="" id="s1"> <option value="">甘肅省</option> <option value="">安徽省</option> <option value="">湖北省</option> </select> <script> var ele = document.getElementById(‘s1‘); //下拉菜單,和你當前事件不同的時候出發事件 ele.onchange= function () { alert(123) } </script> </body> </html>
用onchange事件實現的二級聯動
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>二級聯動</title> </head> <body> <select name="" id="s1"> <option value="">請選擇省份</option> <option value="gansu">甘肅省</option> <option value="hebei">河北省</option> <option value="henan">河南省</option> </select> <select name="" id="c1"> <option value="city">請選擇城市</option> </select> <script> var data = {‘gansu‘:[‘蘭州市‘,‘天水市‘,‘武威市‘],‘hebei‘:[‘保定‘,‘石家莊‘],‘henan‘:[‘鄭州‘,‘開封‘]} var ele_select = document.getElementById(‘s1‘); var ele_critys = document.getElementById(‘c1‘);//父親標簽 ele_select.onchange =function () { // alert(123) // console.log(this.value) var ele_provice = this.value; var citys = data[ele_provice]; console.log(citys); //要在沒有添加之間清空,不然你點一次添加一次,點一次添加一次 //方式一 // ele_critys.children.length=1; //不可行。。但是原理和方式二的一樣 //方式二 // ele_critys.options.length = 1; //留一個,一般多的是設成0了 for (var i =0;i<citys.length;i++) { //創建一個option標簽 var ele_option = document.createElement(‘option‘); //<option></option> ele_option.innerHTML = citys[i]; //得到有文本的option標簽 ele_option.value = i + 1; //設置屬性值 console.log(ele_option); ele_critys.appendChild(ele_option); } } </script> </body> </html>
八、onmouse事件
onmouse<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>onmouse事件</title> <style> .box{ width: 300%; height: 200px; } .title{ background: steelblue; line-height: 40px; } .con{ background: slategray; line-height: 30px; } .hide{ display: none; } </style> </head> <body> <div class="box"> <div class="title">onmouse</div> <div class="con hide"> <div><a href="" class="item">你好嗎?</a></div> <div><a href="" class="item">我好啊</a></div> <div><a href="" class="item">好就好唄</a></div> </div> </div> <script> var ele_title = document.getElementsByClassName(‘title‘)[0]; var ele_box = document.getElementsByClassName(‘box‘)[0]; //鼠標指上去的事件 ele_title.onmouseover = function () { this.nextElementSibling.classList.remove(‘hide‘); }; //鼠標移走的事件的兩種方式 // 方式一(推薦) ele_box.onmouseleave= function () { ele_title.nextElementSibling.classList.add(‘hide‘); }; // 方式二 // ele_title.onmouseout = function () { // this.nextElementSibling.classList.add(‘hide‘); // } // 方式一和方式二的區別: // 不同點 // onmouseout:不論鼠標指針離開被選元素還是任何子元素,都會觸發onmouseout事件 // onmouseleave:只有在鼠標指針離開被選元素時,才會觸發onmouseleave事件 // 相同點:都是鼠標移走觸發事件 </script> </body> </html>
九、事件委派
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>事件委派(委派給所有的子元素)</title> </head> <body> <ul> <li>111</li> <li>222</li> <li>333</li> </ul> <button class="addbtn">點我添加</button> </body> <script> var ele_btn = document.getElementsByClassName(‘addbtn‘)[0]; var ele_ul = document.getElementsByTagName(‘ul‘)[0]; var ele_li =document.getElementsByTagName(‘li‘); //綁定事件 for (var i=0;i<ele_li.length;i++){ ele_li[i].onclick = function () { alert(this.innerHTML) } } //事件委派 ele_btn.onclick = function () { //創建一個li標簽 var ele_li = document.createElement(‘li‘); // ele_li.innerHTML= 444; ele_li.innerText = Math.round(Math.random()*1000); ele_ul.appendChild(ele_li);//吧創建的li標簽添加到ul標簽 ele_ul.addEventListener(‘click‘,function (e) { console.log(e.target); //當前點擊的標簽 console.log(e.target.tagName);//拿到標簽的名字 LI if (e.target.tagName==‘LI‘){ console.log(‘ok‘); // alert(ele_li.innerHTML) } }) } </script> </html>
web前端【第八篇】JS的DOM對象二