没事找事做,元素选择代码
时间:2011-01-05
来源:互联网
- //元素操作
- function element(){ // return false or a elements array
- if(!arguments[0]) return;
- var limits = doc = document;
- var arg = (arguments[0].replace(/(^\s*)|(\s*$)|/g,"")).replace(/(\s{2,})/g," "); //去除前后空白并规范间隔
- var es = arg.split(" "); //将各个单元切开
- var elementReg = /([^#\.][A-Za-z]*)|(#[\w\-]+)|(\.[\w\-]+)/g; //分割一个单元里的各种成分正则
- var markArr,mark;
- var result,one_rs = false;//某个单元结果
- var id_arr,class_arr,tag_arr; //单元成分存储
- var id_l,class_l,tag_l; //各种成分数量
- for(var firstItem = es.shift();!!firstItem;firstItem = es.shift()){
- id_arr=[],class_arr=[],tag_arr=[];
- //将一个单元的各种成分分割存储
- while(markArr = elementReg.exec(firstItem)){
- mark = markArr[0];
- switch(mark.charAt(0)){
- case "#": //id获取元素
- id_arr.push(mark.slice(1));
- break;
- case "."://class获取元素
- class_arr.push(mark.slice(1));
- break;
- default: //标签获取元素
- tag_arr.push(mark.toLowerCase()); //把标签转成小写的方便以后比较
- }
- }
- //人口普查
- id_l=id_arr.length,class_l=class_arr.length,tag_l=tag_arr.length;
-
- //单元成分里有id的话
- if(id_l){
- //one_rs = this.getById(id_arr[0],limits);
- var childs = this.t("*",limits);
- for(var c_index in childs){
- if(childs[c_index].id == id_arr[0]){
- one_rs = [childs[c_index]];
- break;
- }
- }
- if(one_rs.length<1){
- return false;
- }
- }
- //单元成分里有标签的话
- if(tag_l){
- if(one_rs){
- if(one_rs[0].tagName.toLowerCase() != tag_arr[0]){
- return false;
- }
- }else{
- one_rs = this.t(tag_arr[0],limits);
- }
- }
- //单元成分里有类的话
- if(class_l){
- if(one_rs){
- var one_rs_class;
- for(var o_r_index in one_rs){
- one_rs_class = one_rs[o_r_index].className;
- for(var c_index in class_arr){
- c_reg = new RegExp("(\\s+"+class_arr[c_index]+"\\s+)|(^"+class_arr[c_index]+"\\s+)|(\\s+"+class_arr[c_index]+"$)|(^"+class_arr[c_index]+"$)");
- if(!c_reg.test(one_rs_class)){
- //alert(one_rs_class+"stop here"+c_reg);
- return false;
- }
- }
- }
- }else{
- one_rs = this.c(class_arr.join(" "),limits);
- }
- }
- //最后判断
- if(one_rs && one_rs.length>0){
- limits = one_rs;
- one_rs = false;
- }else{
- //alert(firstItem+"stop");
- return false;
- }
- }
- result = limits; //纯属无事生非,没事找事
- return result;
- }
-
- element.prototype.i = function(idName){ // return false or a elements array
- var result = false;
- var result_hc = document.getElementById(idName);
- if(result_hc){
- var result = [result_hc];
- }
- return result;
- };
-
- element.prototype.c = function(className,limits){ // return false or a elements array
- var childs = this.t("*",limits),result = [];
- var class_arr = className.split(" ");
- var childClass;
- var c_reg;
- if(childs == false){
- return false;
- }
- var check_state;//判断类名结果
- for(var maxItem=childs.length-1;maxItem>-1;maxItem--){
- childClass = childs[maxItem].className;
- check_state = true; //美好的愿景
- for(var c_index in class_arr){
- c_reg = new RegExp("(\\s+"+class_arr[c_index]+"\\s+)|(^"+class_arr[c_index]+"\\s+)|(\\s+"+class_arr[c_index]+"$)|(^"+class_arr[c_index]+"$)");
- if(!c_reg.test(childClass)){
- //alert(c_reg+"|"+childClass);
- check_state = false;//愿景在此破灭
- break;
- }
- }
- if(check_state) result.push(childs[maxItem]);
- }
- if(result.length<1){
- result = false;
- }
- return result;
- };
-
- element.prototype.t = function(tagName,limits){ // return false or a elements array
- var result = [];
- if((typeof limits.nodeType != "undefined" && limits.nodeType == 1) || limits == document){
- var result_hc = limits.getElementsByTagName(tagName);
- for(var r_hc_l = result_hc.length-1;r_hc_l>-1;r_hc_l--){
- result.push(result_hc[r_hc_l]);
- }
- }else if(limits instanceof Array){
- for(var i=0;!!limits[i];i++){
- var child_rs = this.t(tagName,limits[i]);
- if(child_rs){
- result = result.concat(child_rs);
- }
- }
- }
- if(result.length<1) result = false;
- return result;
- };
-
- element.prototype.getHeight = function(e){
- return Math.max(e.offsetHeight,e.scrollHeight,e.clientHeight);
- };
-
- element.prototype.getWidth = function(e){
- return Math.max(e.offsetWidth,e.scrollWidth,e.clientWidth);
- };
作者: shenshike 发布时间: 2011-01-05
- //方便使用
- var e = function(){ // return false or a elements array
- return new element(arguments[0]);
- }
- e._e = e();
- e.i = function(){ // return false or a element
- var result = e._e.i(arguments[0]);
- if(result != false){
- result = result[0];
- }
- return result;
- }
- e.t = e._e.t;
- e.c = e._e.c;
作者: shenshike 发布时间: 2011-01-05
以后就可以这样了
var divs = e("body div div#test div.test");
var div = e.i("test");//id
var divs = e.c("test");//class
var divs = e.t("div");//tag
没有仔细测过,可能会有错.
var divs = e("body div div#test div.test");
var div = e.i("test");//id
var divs = e.c("test");//class
var divs = e.t("div");//tag
没有仔细测过,可能会有错.
作者: shenshike 发布时间: 2011-01-05
为什么说是没事找事呢,因为:
var e = {
i=document.getElementById;
t=document.getElementsByTagName;
}
var e = {
i=document.getElementById;
t=document.getElementsByTagName;
}
作者: shenshike 发布时间: 2011-01-05
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28