原生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更改class和id的方法
Oct 10 Javascript
jQuery scrollFix滚动定位插件
Apr 01 Javascript
jquery简单实现图片切换效果的方法
May 12 Javascript
EasyUi combotree 实现动态加载树节点
Apr 01 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
Jun 09 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
Dec 26 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
Jan 19 Javascript
bootstrap警告框示例代码分享
May 17 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
Jan 13 Javascript
Angular使用cli生成自定义文件、组件的方法
Sep 04 Javascript
微信小程序 checkbox使用实例解析
Sep 09 Javascript
JavaScript中的相等操作符使用详解
Dec 21 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
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
php将文本文件转换csv输出的方法
2014/12/31 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
2019/05/20 PHP
JS学习之一个简易的日历控件
2010/03/24 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
浅谈js中的in-for循环
2016/06/28 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
详解Python中的循环语句的用法
2015/04/09 Python
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
全球烹饪课程的领先预订平台:Cookly
2020/01/28 全球购物
学校十一活动方案
2014/02/01 职场文书
成人继续教育实施方案
2014/03/01 职场文书
团日活动总结
2014/04/28 职场文书
公司应聘自荐书
2014/06/14 职场文书
医学检验专业自荐信
2014/09/18 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
微信早安问候语
2015/11/10 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js
HttpClient实现表单提交上传文件
2022/08/14 Java/Android