原生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 相关文章推荐
驱动事件的addEvent.js代码
Mar 27 Javascript
慎用 somefunction.prototype 分析
Jun 02 Javascript
有趣的JavaScript数组长度问题代码说明
Jan 20 Javascript
jQuery读取和设定KindEditor值的方法
Nov 22 Javascript
js+css实现的简单易用兼容好的分页
Dec 30 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
Apr 07 Javascript
AngularJS中transclude用法详解
Nov 03 Javascript
JS中跳出循环的示例代码
Sep 14 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
Oct 25 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
May 31 Javascript
vue中是怎样监听数组变化的
Oct 24 Javascript
分享一个vue实现的记事本功能案例
Apr 11 Vue.js
自己封装的一个原生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正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
php获取twitter最新消息的方法
2015/04/14 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
JS 显示当前日期与时间的代码
2010/03/24 Javascript
Array.prototype 的泛型应用分析
2010/04/30 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
javascript实用小函数使用介绍
2013/11/11 Javascript
javascript实现复选框超过限制即弹出警告框的方法
2015/02/25 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
2016/05/10 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
通过JS判断网页是否为手机打开
2020/10/28 Javascript
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
syb养殖创业计划书
2014/01/09 职场文书
教师产假请假条范文
2014/04/10 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
毕业典礼邀请函
2015/01/31 职场文书
岳庙导游词
2015/02/04 职场文书
2015年管理人员工作总结
2015/05/13 职场文书
学会感恩主题班会
2015/08/12 职场文书
学生病假条怎么写
2015/08/17 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书