一个获取第n个元素节点的函数,现在只能通过html标签获取元素,功能还不完善
演示:html
1
2
3
4
5
6
7
8
|
< 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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
/** * * @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)); //选取第二个元素 |