原生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 相关文章推荐
JavaScript使用replace函数替换字符串的方法
Apr 06 Javascript
基于javascript实现动态显示当前系统时间
Jan 28 Javascript
浅析JavaScript作用域链、执行上下文与闭包
Feb 01 Javascript
详解VueRouter进阶之导航钩子和路由元信息
Sep 13 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
Dec 23 Javascript
解决easyui日期时间框ie的兼容的问题
Mar 01 Javascript
vue路由组件按需加载的几种方法小结
Jul 12 Javascript
移动端图片上传旋转、压缩问题的方法
Oct 16 Javascript
JavaScript ES2019中的8个新特性详解
Feb 20 Javascript
Vue实现一个图片懒加载插件
Mar 11 Javascript
JS实现指定区域的全屏显示功能示例
Apr 25 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
Oct 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
php设计模式之命令模式使用示例
2014/03/02 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
Vue.js展示AJAX数据简单示例讲解
2017/03/29 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
python实现代码行数统计示例分享
2014/02/10 Python
Python的Flask框架与数据库连接的教程
2015/04/20 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
详解Python中的正则表达式
2018/07/08 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
建筑设计所实习生自我鉴定
2013/09/25 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
2014年大学生工作总结
2014/11/20 职场文书
优秀教师单行材料
2014/12/16 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
信用卡收入证明范本
2015/06/12 职场文书
执行力心得体会范文
2016/01/11 职场文书