一個獲取第n個元素節點的函數,現在只能通過html標簽獲取元素,功能還不完善
演示:html
<ul id="list"> <li>1<button>a</button></li> <li>2<button>b</button><button>o</button></li> <p>test</p> <li>3<button>c</button></li> <li>4<button>d</button></li> <li>5<button>e</button></li> </ul>
js:
/** * * @param parent父節點 * @param ele要選取的元素標簽 * @param num第幾個元素 * @return {*} */ function nth(parent,ele,num){ var _ele=Array.prototype.slice.call(parent.childNodes),eleArray=[]; //將父節點的子節點轉換成數組_ele;eleArray為只儲存元素節點的數組 for(var i= 0,len=_ele.length;i<len;i++){ if(_ele[i].nodeType==1){ eleArray.push(_ele[i]);//過濾掉非元素節點 } } if(arguments.length===2){ //如果只傳入2個參數,則如果第二個參數是數字,則選取父節點下的第幾個元素 //如果第二個參數是字符串,則選取父節點下的所有參數代表的節點 if(typeof arguments[1]==="string"){ _ele=Array.prototype.slice.call(parent.getElementsByTagName(arguments[1])); return _ele; }else if(typeof arguments[1]==="number"){ return eleArray[arguments[1]]; } }else{ //如果參數齊全,則返回第幾個某節點,索引從0開始 _ele=Array.prototype.slice.call(parent.getElementsByTagName(ele)); return _ele[num]; } } /* 測試 */ var list=document.getElementById("list"); console.log(nth(list,"li",2).innerHTML);//選取第三個li元素 console.log(nth(list,"button",3).innerHTML)//選取第四個按鈕 console.log(nth(nth(list,"li",1),"button",1).innerHTML);//選取第二個li下的第二個按鈕 console.log(nth(nth(list,"li",1),"button"));//選取第二個li下的所有按鈕 console.log(nth(list,2));//選取第二個元素