//实现查重 function checkRepeat(element,elements){ for(var i=0;i<elements.length;i++){ if(element==elements[i]){ return false; } } return true; } //选择器主题 function $(){ var elements=new Array(); var regid=/^(/w*)#([/w/-]+)$/;//ID选择 var regclass=/^(#/w+/s+|/./w+/s+|/w+/s+)?(/w*)/.([/w/-]+)$/;//类选择 var regtag=/^(#[/w/-]+/s+|/.[/w/-]+/s+|/w+/s+)?/s*(/w+)$/;//标签选择 var allTags,j,k,newReg$1,newReg$2,newReg$3; for(var i=0;i<arguments.length;i++){ var element=arguments[i]; if(typeof arguments[i]=='string'){//如果参数是否个选择器 if(regid.test(arguments[i])){//由于ID必须是唯一的,所以为它定义任何父元素都是没有意义的 element=document.getElementById(RegExp.$2); if(element&&checkRepeat(element,elements)&&(RegExp.$1?(RegExp.$1.toLowerCase()==element.tagName.toLowerCase()):true)){ elements.push(element); } } else if(regtag.test(arguments[i])){ if(RegExp.$1)//父元素存在 { newReg$1=RegExp.$1; newReg$2=RegExp.$2 newReg$1=newReg$1.replace(//s*$/,''); newElements=$(newReg$1); for(k=0;k<newElements.length;k++){ allTags=newElements[k].getElementsByTagName(newReg$2); for(j=0;element=allTags[j];j++){ if(checkRepeat(element,elements)){ elements.push(element); } } } } else//没有父元素 { allTags=document.getElementsByTagName(RegExp.$2); for(j=0;element=allTags[j];j++){ if(checkRepeat(element,elements)){ elements.push(element); } } } } else if(regclass.test(arguments[i])){ if(RegExp.$1)//父元素存在 { newReg$1=RegExp.$1; newReg$2=RegExp.$2; newReg$3=RegExp.$3; newReg$1=newReg$1.replace(//s*$/,''); newElements=$(newReg$1); for(k=0;k<newElements.length;k++) { allTags=newElements[k].getElementsByTagName(newReg$2?newReg$2:'*'); for(j=0;element=allTags[j];j++){ if(element.className==newReg$3){ if(checkRepeat(element,elements)){ elements.push(element); } } } } } else//,没有父元素 { allTags=document.getElementsByTagName(RegExp.$2?RegExp.$2:'*'); for(j=0;element=allTags[j];j++){ if(element.className==RegExp.$3){ if(checkRepeat(element,elements)){ elements.push(element); } } } } } } else if(arguments[i].nodeType){//如果参数直接是DOM元素 element=arguments[i]; if(checkRepeat(element,elements)){ elements.push(element); } } } return elements; }