1 //通过类名获取元素
2 function getByClass(oParent,sClass){
3 //高版本浏览器使用系统自带方法
4 if(oParent.getElementsByClassName){
5 return oParent.getElementsByClassName(sClass);
6 }else{//ie8及以下 先通过标签名获取此元素父级下的所有元素 再用正则匹配出符合条件的元素
7 var arr=[];
8 var reg=new RegExp('\\b'+sClass+'\\b');
9 var aEle=oParent.getElementsByTagName('*');
10 for(var i=0; i<aEle.length; i++){
11 if(reg.test(aEle[i].className)){
12 arr.push(aEle[i]);
13 }
14 }
15 return arr;
16 }
17 }
18
19 function getByStr(aParent,str){
20 var aChild=[];
21
22 for(var i=0; i<aParent.length; i++){
23 switch (str.charAt(0)){
24 case '#':
25 var obj=document.getElementById(str.substring(1));
26 aChild.push(obj);
27 break;
28 case '.':
29 var aEle=getByClass(aParent[i],str.substring(1));
30
31 for(var j=0; j<aEle.length; j++){
32 aChild.push(aEle[j]);
33 }
34 break;
35 default:
36 if(/\w+\[\w+=\w+\]/.test(str)){ //input[type=button]
37 var aStr=str.split(/\[|=|\]/);
38 var aEle=aParent[i].getElementsByTagName(aStr[0]);
39 for(var j=0; j<aEle.length; j++){
40 if(aEle[j].getAttribute(aStr[1])==aStr[2]){
41 aChild.push(aEle[j]);
42 }
43 }
44 }else if(/\w+:\w+(\(\d+\))?/.test(str)){ //li:first li:eq(3)
45 var aStr=str.split(/:|\(|\)/);
46 var aEle=aParent[i].getElementsByTagName(aStr[0]);
47 switch (aStr[1]){
48 case 'first':
49 aChild.push(aEle[0]);
50 break;
51 case 'last':
52 aChild.push(aEle[aEle.length-1]);
53 break;
54 case 'eq':
55 aChild.push(aEle[aStr[2]]);
56 break;
57 case 'lt':
58 for(var j=0; j<aStr[2]; j++){
59 aChild.push(aEle[j]);
60 }
61 break;
62 case 'gt':
63 for(var j=parseInt(aStr[2])+1; j<aEle.length; j++){
64 aChild.push(aEle[j]);
65 }
66 break;
67 case 'odd':
68 for(var j=1; j<aEle.length; j+=2){
69 aChild.push(aEle[j]);
70 }
71 break;
72 case 'even':
73 for(var j=0; j<aEle.length; j+=2){
74 aChild.push(aEle[j]);
75 }
76 break
77
78 }
79
80 }else if(/\w+>\w+/.test(str)){ //ul>li
81 var aStr=str.split('>');
82 var aEle=aParent[i].getElementsByTagName(aStr[0]);
83 for(var j=0; j<aEle.length; j++){
84 for(var k=0; k<aEle[j].children.length; k++){
85 if(aEle[j].children[k].tagName.toLowerCase()==aStr[1]){
86 aChild.push(aEle[j].children[k]);
87 }
88 }
89 }
90 }else{
91 var aEle=aParent[i].getElementsByTagName(str);
92
93 for(var j=0; j<aEle.length; j++){
94 aChild.push(aEle[j]);
95 }
96 }
97 break;
98 }
99 }
100
101 return aChild;
102 }
103 //选择器(实质就是一层一层的向下找)
104 function getEle(str,aParent){
105 var arr=str.replace(/^\s+|\s+$/g,'').split(/\s+/);
106
107 var aParent=aParent || [document];
108 var aChild=[];
109
110 for(var i=0; i<arr.length; i++){
111 aChild=getByStr(aParent,arr[i]);
112
113 aParent=aChild; //这一次选出来结果,作为下一次父级
114 }
115
116 return aChild;
117 }