DOM基礎操作實戰代碼
阿新 • • 發佈:2018-11-25
銷毀 pan var reat 操作 element 子元素 忽略 tel
對於已經講解給大家的DOM實戰,我今天給大家幾個實戰代碼,可以讓大家加深對此的理解!
1.用DOM動態生成這樣一個結構:
1 <div class=”example”> 2 3 <p class=”slogan”>HelloWorld</p> 4 5 </div>
我認為中規中矩的寫法是這個樣子的:
1 var div = document.createElement(‘div’), 2 p = document.createElement(‘p’), 3 text = document.create(‘HelloWorld’);4 div.setAttribute(‘class’, ‘example’); 5 p.setAttribute(‘class’, ‘slogan’); 6 p.appendChild(text); 7 div.appendChild(p); 8 document.body.append(div);
JavaScript; “復制代碼”); “查看純文本代碼”); “返回代碼高亮”)
? 不過這裏有點小提示,節點的className屬性可以讀寫操作class。
因此這裏我們為標簽賦類名的值的時候可以不用setAttribute,可以直接用className。
JavaScript; “復制代碼”); “查看純文本代碼”); “返回代碼高亮”)
1div.className = ‘example’; 2 p.className = ‘slogan’;
不過,還有一個最取巧的辦法,那就是直接用innerHTML。
JavaScript; “復制代碼”); “查看純文本代碼”); “返回代碼高亮”)
1 div.innerHTML = <p class=“slogan”>HelloWorld</p>
2.封裝函數InsertAfter();功能類似insertBefore,直接在原型鏈上編程,可以忽略老版本的瀏覽器。
代碼:
1 Element.insertAfter = function (targetNode, afterNode) { 2 var nextSib = after.nextElementSibling; 3 if(this.children.length <= 1 || !nextSib) { 4 this.appendChild(targetNode); 5 }else { 6 this.insertBefore(targetNode, nextSibling); 7 } 8 }JavaScript; “復制代碼”); “查看純文本代碼”); “返回代碼高亮”)
這裏是利用了原生的insertBefore方法,我們檢測當只有一個子元素或者我們要找的元素就是最後一個,那麽直接調用appendChild方法就可以,否則就找到要找的元素的下一個,然後把它的下一個元素當做insert的元素調用insertBefore方法就可以了。
3.封裝remove()函數,使得child.remove()可以銷毀自身。
看題目的要求就是要在原型鏈上編程。
代碼:
1 Element.prototype.remove = function () { 2 var parent = this.parentNode; 3 parent.removeChild(this); 4 }
JavaScript; “復制代碼”); “查看純文本代碼”); “返回代碼高亮”)
這個問題的代碼其實很簡單,只要找到這個元素的父級,然後讓父級刪除掉這個元素就可以了。
4.將目標節點內部的節點順序逆序。
eg: <div><p></p><a></a></div> —>
<div><a></a><p></p></div>
對於這個題目,我的做法是利用我們插入的元素如果是本身就存在的,那麽就會剪切到新的位置上這個特性來做的。
代碼:
Element.prototype.reverseElement = function(){ var len = this.childNodes.length, child, first = this.firstChild; for (var i = 0; i < len - 1; i++){ child = this.lastChild; this.insertBefore(child, first); } }JavaScript; “復制代碼”); “查看純文本代碼”); “返回代碼高亮”)
DOM基礎操作實戰代碼