原生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 相关文章推荐
免费空间广告万能消除代码
Sep 04 Javascript
javascript与CSS复习(《精通javascript》)
Jun 29 Javascript
浅谈JS闭包中的循环绑定处理程序
Nov 09 Javascript
javascript实现当前页导航激活的方法
Feb 27 Javascript
使用jquery.form.js实现图片上传的方法
May 05 Javascript
Vue.js bootstrap前端实现分页和排序
Mar 10 Javascript
微信小程序开发入门基础教程
Apr 19 Javascript
关于vue-resource报错450的解决方案
Jul 24 Javascript
浅谈JavaScript find 方法不支持IE的问题
Sep 28 Javascript
解决VUE中document.body.scrollTop为0的问题
Sep 15 Javascript
javascript中floor使用方法总结
Feb 02 Javascript
vue设置动态请求地址的例子
Nov 01 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制作的意见反馈表源码
2007/03/11 PHP
手把手教你使用DedeCms的采集的图文教程
2007/03/11 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
php获取远程文件内容的函数
2015/11/02 PHP
JQuery radio(单选按钮)操作方法汇总
2015/04/15 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
基于dataset的使用和图片延时加载的实现方法
2017/12/11 Javascript
浅谈Angularjs中不同类型的双向数据绑定
2018/07/16 Javascript
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
vue 组件间的通信之子组件向父组件传值的方式
2020/07/29 Javascript
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
Python中AND、OR的一个使用小技巧
2015/02/18 Python
Python中操作mysql的pymysql模块详解
2016/09/13 Python
python多线程同步实例教程
2019/08/11 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
澳大利亚最受欢迎的超级商场每日优惠:Catch
2020/11/17 全球购物
servlet面试题
2012/08/20 面试题
运动会稿件50字
2014/02/17 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
个人借条范本
2015/05/25 职场文书
浅谈Python中的正则表达式
2021/06/28 Python
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
vue elementUI批量上传文件
2022/04/26 Vue.js