一個獲取第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));//選取第二個元素
新聞熱點
疑難解答