原生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 相关文章推荐
js模拟滚动条(横向竖向)
Feb 22 Javascript
JQuery创建DOM节点的方法
Jun 11 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
Aug 06 Javascript
原生JS实现美图瀑布流布局赏析
Sep 07 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
Apr 01 Javascript
关于Vue.js一些问题和思考学习笔记(2)
Dec 02 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
Jan 16 Javascript
node中的session的具体使用
Sep 14 Javascript
JS事件绑定的常用方式实例总结
Mar 02 Javascript
Vue+Django项目部署详解
May 30 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
Oct 30 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
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将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
PHP.vs.JAVA
2016/04/29 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
使用JavaScript保存文本文件到本地的两种方法
2019/01/22 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
2016/09/21 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
python 正确保留多位小数的实例
2018/07/16 Python
Python常用爬虫代码总结方便查询
2019/02/25 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
Python如何实现大型数组运算(使用NumPy)
2020/07/24 Python
matplotlib bar()实现百分比堆积柱状图
2021/02/24 Python
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
党校学习思想汇报
2014/01/06 职场文书
上班早退检讨书
2014/01/09 职场文书
协议书模板
2014/04/23 职场文书
教师求职信范文
2014/05/24 职场文书
咖啡店创业计划书
2014/08/15 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
培训讲师开场白
2015/06/01 职场文书
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers