原生JS查找元素的方法(推荐)


Posted in Javascript onNovember 22, 2016

今天写了一个很简单、很粗暴的通过JS根据类来查找DOM元素。

为了降低它的粗暴等级(耗费性能)我给了三个等级。

首先性能最好的,适合FF,CH,IE8,通过querySelectorAll这个API。

其次是指定ID

最后只能全页面进行匹配class,不过比较节省的性能的是,在指定class名称的时候,同时传入HTML标签的类型,用于节省遍历的范围!

因为水平有限,目前也只能写成这种,真的好好奇JQ的选择器是怎么去匹配DOM的,如果有大神看到这篇文章,请不要吝啬施教。。。

下面贴代码:

function $(d,t){
    
    var c = null, // className 
      e = null, // element
      i = null; // id

    function type(p){
      /function.(\w*)\(\)/.test(p.constructor);
      return RegExp.$1.toLowerCase();
    }

    if(type(d) == 'string'){ 

      if(/^\.[a-z,A-Z,_]\w*$/.test(d)){ // 匹配class
        c = d;
      }else if(/^#[a-z,A-Z,_]\w*$/.test(d)){ // 匹配id
        i = d;
      }else if(/^[a-z,A-Z,_]+$/.test(d)){ // 匹配元素
        e = d;
      }else{
        return undefined;
      }
      if(document.querySelectorAll){ 

        if(c || e) return document.querySelectorAll(c || e);
        if(i) return document.querySelectorAll(i)[0];

      }else{
        if(c){
          var all = document.getElementsByTagName(t || '*'),
            cn = c.slice(1,c.length),
            reg = new RegExp('^'+cn+'\\b'), // 限定类名的起始,结束只要是相同字符结束即可。
            em = [];
            for(var i=0;i<all.length;i++){
              if(reg.test(all[i].className)){
                em.push(all[i])
              }
            }
            return em;
        }else if(e){
          return document.getElementsByTagName(e);
        }else if(i){
          return document.getElementById(i);
        }
      }
      
    }else{
      return undefined;
    }

  }

调用方式:

$('selector'[,type])

以上就是小编为大家带来的原生JS查找元素的方法(推荐)全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
document对象execCommand的command参数介绍
Aug 01 Javascript
js跑马灯代码(自写)
Apr 17 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
Aug 02 Javascript
javascript实现原生ajax的几种方法介绍
Sep 21 Javascript
Checbox的操作含已选、未选及判断代码
Nov 07 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
Jan 10 Javascript
jquery中常用的函数和属性详细解析
Mar 07 Javascript
JQuery.get提交页面不跳转的解决方法
Jan 13 Javascript
ExpressJS入门实例
Jan 14 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
Jan 04 Javascript
node.js入门教程之querystring模块的使用方法
Feb 27 Javascript
IntersectionObserver实现图片懒加载的示例
Sep 29 Javascript
自己封装的一个原生JS拖动方法(推荐)
Nov 22 #Javascript
SelecT下拉框选中和取值的解决方法
Nov 22 #Javascript
javascript入门之window对象【新手必看】
Nov 22 #Javascript
AngularJS实现DOM元素的显示与隐藏功能
Nov 22 #Javascript
JavaScript ES6中CLASS的使用详解
Nov 22 #Javascript
AngularJS实现ajax请求的方法
Nov 22 #Javascript
js数组操作方法总结(必看篇)
Nov 22 #Javascript
You might like
福利彩票幸运号码自动生成器
2006/10/09 PHP
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
2011/01/08 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
微信小程序 循环及嵌套循环的使用总结
2017/09/26 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
[01:18:35]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第一场 1月29日
2021/03/11 DOTA
Python pass详细介绍及实例代码
2016/11/24 Python
python实现神经网络感知器算法
2017/12/20 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
如何用python写个模板引擎
2021/01/14 Python
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
教师自我评价范例
2013/09/24 职场文书
商场拾金不昧表扬信
2014/01/13 职场文书
幼儿运动会邀请函
2014/01/17 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
门前三包责任书
2014/04/15 职场文书
班主任个人工作反思
2014/04/28 职场文书
林肯就职演讲稿
2014/05/19 职场文书
高中课程设置方案
2014/05/28 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
赢在中国观后感
2015/06/02 职场文书
Python基础学习之奇异的GUI对话框
2021/05/27 Python
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS