原生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 框架小结 个人工作经验
Jun 13 Javascript
PNG背景在不同浏览器下的应用
Jun 22 Javascript
运用jquery实现table单双行不同显示并能单行选中
Jul 25 Javascript
这段js代码得节约你多少时间
Dec 20 Javascript
javascript创建数组之联合数组的使用方法示例
Dec 26 Javascript
js通过八个点 拖动改变div大小的实现方法
Mar 05 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
Nov 23 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
Mar 12 Javascript
JavaScript学习笔记之DOM基础 2.4
Aug 14 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
Jul 18 Javascript
angular指令笔记ng-options的使用方法
Sep 18 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
Sep 10 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 获取MSN好友列表的代码(2009-05-14测试通过)
2009/09/09 PHP
php匹配字符中链接地址的方法
2014/12/22 PHP
php实用代码片段整理
2016/11/12 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
PHP 与 UTF-8 的最佳实践详细介绍
2017/01/04 PHP
javascript parseInt 大改造
2009/09/27 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
2017/03/03 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
python模拟事件触发机制详解
2018/01/19 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
python多线程同步之文件读写控制
2021/02/25 Python
Python文件路径名的操作方法
2019/10/30 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
Python项目跨域问题解决方案
2020/06/22 Python
H5混合开发app如何升级的方法
2018/01/10 HTML / CSS
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
自荐信格式的六要素
2013/09/21 职场文书
办理退休介绍信
2014/01/09 职场文书
中学生获奖感言
2014/02/04 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers