原生JS實現(xiàn)幾個常用DOM操作API實例
原生實現(xiàn)jQuery的sibling方法
<body> <span>我是span標(biāo)簽</span> <div>我是一個div</div> <h1 id="h1">我是標(biāo)題</h1> <p>我是一個段落</p> <script type="text/javascript"> //獲取元素的兄弟節(jié)點 function siblings(o){//參數(shù)o就是想取誰的兄弟節(jié)點,就把那個元素傳進(jìn)去 var a = [];//定義一個數(shù)組,用來存儲o的兄弟元素 //previousSibling返回位于相同節(jié)點樹層級的前一個元素 var p = o.previousSibling; while(p){//先取o的前面的兄弟元素 判斷有沒有上一個兄弟元素,如果有則往下執(zhí)行,p表示previousSibling if(p.nodeType === 1){ a.push(p); } p = p.previousSibling//最后把上一個節(jié)點賦給p } a.reverse();//把順序反轉(zhuǎn)一下,這樣元素的順序就是按先后的了 //nextSibling返回位于相同節(jié)點樹層級的下一個節(jié)點 var n = o.nextSibling;//再取o下面的兄弟元素 while(n){//判斷有沒有下一個兄弟結(jié)點,n是nextSibling的意思 if(n.nodeType === 1){//判斷是否是元素節(jié)點 a.push(n); } n = n.nextSibling; } return a//最后按從老大到老小的順序,把這一組元素返回 } var oH = document.getElementById("h1"); console.log(siblings(oH));//[span, div, p, script] </script> </body>
原生實現(xiàn)jQuery的class選擇器
//用數(shù)組模擬jQuery的class選擇器 function getClassName(ParentId,NewClassName){ var AllClassElem = ParentId.getElementsByTagName(“*”); var AllClass = []; var i=0; for(var i=0; i<AllClassElem.length; i++){ if(AllClassElem[i].className == NewClassName){ AllClass.push(AllClassElem[i]); } } return AllClass;
}
//用法:
var PElementId=document.getElementById("bar");
var buttons = getClassName(PElementId,"sco");
//取id="bar"下class="sco"的元素;
getElementsByClassName()
/** * 獲取指定類名的元素對象集合 * @param {Object} node 父節(jié)點 * @param {String} classname 指定類名 * @return {[Object]}目標(biāo)對象集合 */ function getElementsByClassName(node,classname) { //如果瀏覽器支持則直接使用 if (node.getElementsByClassName) { return node.getElementsByClassName(classname); } else { return (function getElementsByClass(searchClass,node) { if ( node == null ) node = document; var classElements = [], els = node.getElementsByTagName("*"), elsLen = els.length, pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)"), i, j; for (i = 0, j = 0; i < elsLen; i++) { if ( pattern.test(els[i].className) ) { classElements[j] = els[i]; j++; } } return classElements; })(classname, node); } }
addLoadEvent()
/** * 方便的將在文檔加載后運行的函數(shù)添加到window.onload中 * @param {function} func 待運行函數(shù) */ function addLoadEvent(func){ var oldOnload = window.onload; //typeof 返回String類型 if(typeof window.onload != 'function'){ window.onload = func; }else{ window.onload = function(){ oldOnload(); func(); } } }
addClass()
/** * 為指定元素結(jié)點添加新類名 * element 元素結(jié)點 * value 類名 */ function addClass(element,value){ //如果元素類名為空,直接將value賦值給相應(yīng)的元素類名 if(!element.className){ element.className = value; }else{ //否則需要將類名之間用空格隔開 newClassName = element.className; //多個類名間添加空格 newClassName += ' '; newClassName += value; element.className = newClassName; } }
insertAfter()
/** * 在目標(biāo)元素結(jié)點后面插入新的元素結(jié)點 * newElement 待插入的新元素結(jié)點 * targetElement 目標(biāo)元素結(jié)點 */ function insertAfter(newElement,targetElement){ var parent = targetElement.parentNode; if(parent.lastChild == targetElement){ parent.appendChild(newElement); }else{ parent.insertBefore(newElement,targetElement.nextSibling); } }
getNextElement()
/** * 獲取下一個元素結(jié)點 * @param {Object} node 兄結(jié)點 * @return {Object || null}下一個元素結(jié)點或未獲取到 */ function getNextElement(node){ var sibNode = node.nextSibling; if (sibNode.nodeType == 1) { return node; } if (sibNode.nextSibling) { //遞歸調(diào)用 return getNextElement(node.nextSibling); } return null; }
以上這篇原生JS實現(xiàn)幾個常用DOM操作API實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
javascript實現(xiàn)在網(wǎng)頁任意處點左鍵彈出隱藏菜單的方法
這篇文章主要介紹了javascript實現(xiàn)在網(wǎng)頁任意處點左鍵彈出隱藏菜單的方法,設(shè)計鼠標(biāo)事件及css樣式操作的相關(guān)技巧,需要的朋友可以參考下2015-05-05整理Javascript函數(shù)學(xué)習(xí)筆記
整理Javascript函數(shù)學(xué)習(xí)筆記,之前一系列的文章是跟我學(xué)習(xí)Javascript,本文就是進(jìn)一步學(xué)習(xí)Javascript函數(shù),希望大家繼續(xù)關(guān)注2015-12-12[全兼容哦]--實用、簡潔、炫酷的頁面轉(zhuǎn)入效果loing
[全兼容哦]--實用、簡潔、炫酷的頁面轉(zhuǎn)入效果loing...2007-05-05JS 對象(Object)和字符串(String)互轉(zhuǎn)方法
下面小編就為大家?guī)硪黄狫S 對象(Object)和字符串(String)互轉(zhuǎn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05JavaScript返回當(dāng)前會話cookie全部鍵值對照的方法
這篇文章主要介紹了JavaScript返回當(dāng)前會話cookie全部鍵值對照的方法,涉及javascript操作cookie的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-04-04