原生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 遍历验证所有文本框的值
Aug 27 Javascript
Visual Studio中的jQuery智能提示设置方法
Mar 27 Javascript
原生js和jquery中有关透明度设置的相关问题
Jan 08 Javascript
node.js中的fs.mkdirSync方法使用说明
Dec 17 Javascript
js实现div层缓慢收缩与展开的方法
May 11 Javascript
用js编写的简单的计算器代码程序
Aug 04 Javascript
javascript中call apply 与 bind方法详解
Mar 10 Javascript
Node.js实现注册邮箱激活功能的方法示例
Mar 23 Javascript
layer插件select选中默认值的方法
Aug 14 Javascript
深入理解Angularjs 脏值检测
Oct 12 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
Nov 16 Javascript
vue-cli3+typescript初体验小结
Feb 28 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调用三种数据库的方法(3)
2006/10/09 PHP
php操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
javascript 节点排序 2
2011/01/31 Javascript
js模拟点击事件实现代码
2012/11/06 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
2016/10/31 Javascript
vue使用watch 观察路由变化,重新获取内容
2017/03/08 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
值得收藏的vuejs安装教程
2017/11/21 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
微信小程序Echarts图表组件使用方法详解
2019/06/25 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
vue watch监控对象的简单方法示例
2021/01/07 Vue.js
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
python遍历类中所有成员的方法
2015/03/18 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
python实现事件驱动
2018/11/21 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
德国自然时尚和有机产品购物网站:Waschbär
2019/05/29 全球购物
2014年党员承诺书范文
2014/05/20 职场文书
排球赛新闻稿
2015/07/17 职场文书
小学思品教学反思
2016/02/20 职场文书
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android