jquery选择器(简易版)
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 }