js实现类选择器和name属性选择器的示例步骤


Posted in Javascript onFebruary 07, 2021

jQuery的出现,大大的提升了我们操作dom的效率,使得我们的开发更上一层楼,如jQuery的选择器就是一个很强大的功能,它包含了类选择器、id选择器、属性选择器、元素选择器、层级选择器、内容筛选选择器等等,很是方便快捷,并且这些选择器的兼容性都很好,可以说操作dom使用jq选择器一时爽,一直使用一直爽!只是,目前Vue、React、Angular三大框架的出现大大降低了JQuery的使用频率,而且JQuery在操作dom和绑定数据时确实存在一定的性能问题和各种坑,但依旧不可抹杀jq在操作dom方面的强大存在!

说了JQuery这么多的牛逼之处,那么它的很多内部原理是如何实现的呢?今天就来简单实现一个类似jQuery的类选择器和name属性选择器。

类选择器:

function getElementsByClass(className) {
   var classArr = [];
   var tags = document.getElementsByTagName("*");

   for (var i = 0; i < tags.length; i++) {
    if (tags[i].nodeType == 1) {
     if (tags[i].getAttribute("class") == className) {
      classArr.push(tags[i]);
     }
    }
   }
   return classArr;
}

其实name属性选择器跟类选择器一样,只是判断条件稍微变了一下而已:

function getElementsByName(name) {
   var nameArr = [];
   var num = 0;
   var tags = document.getElementsByTagName("*");

   for (var i = 0; i < tags.length; i++) {
    if (tags[i].nodeType == 1) {
     if (tags[i].getAttribute("name") == name) {
      nameArr.push(tags[i]);
     }
    }
   }

   return nameArr;
}

name属性选择器大多用在表单的操作方面。

以上代码中有一个nodeType的属性,它是用来判断节点的类型,nodeType共有12个值,1代表节点元素,2代表属性,3代表元素或属性中的文本内容。这三个数值用的是比较多的,其他9个用的不多,想了解的话可以去看一下API。在这里,我们需要得到元素节点,所以就会判断当前元素的nodeType是否为1。

再来贴一下用递归来实现获取元素的所有子节点(含孙子节点):

/** 
   * 递归获取所有子节点
   * 
   node代表想要获取所有子节点的父节点

   type取值:
   1  Element         代表元素
   2  Attr          代表属性
   3  Text          代表元素或属性中的文本内容
   4  CDATASection      代表文档中的 CDATA 部分(不会由解析器解析的文本)
   5  EntityReference     代表实体引用
   6  Entity         代表实体
   7  ProcessingInstruction  代表处理指令
   8  Comment         代表注释
   9  Document        代表整个文档(DOM 树的根节点)
   10 DocumentType      向为文档定义的实体提供接口
   11 DocumentFragment    代表轻量级的 Document 对象,能够容纳文档的某个部分
   12 Notation        代表 DTD 中声明的符号
  */
  var allChildNodes = function (node, type) {
   // 1.创建全部节点的数组
   var allCN = [];

   // 2.递归获取全部节点
   var getAllChildNodes = function (node, type, allCN) {
    // 获取当前元素所有的子节点nodes
    var nodes = node.childNodes;
    // 获取nodes的子节点
    for (var i = 0; i < nodes.length; i++) {
     var child = nodes[i];
     // 判断是否为指定类型节点
     if (child.nodeType == type) {
      allCN.push(child);
     }
     getAllChildNodes(child, type, allCN);
    }
   }
   getAllChildNodes(node, type, allCN);
   // 3.返回全部节点的数组
   return allCN;
  }

  // 调用:
  // 获取body中全部节点
  allChildNodes(document.querySelector('body'), 1);
  
  //获取body中全部纯文本节点
  allChildNodes(document.querySelector('body'), 3)

作者:小坏

出处:http://tnnyang.cnblogs.com

以上就是js实现类选择器和name属性选择器的示例步骤的详细内容,更多关于js实现类选择器和name属性选择器的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
解决FLASH需要点击激活的代码
Dec 20 Javascript
JavaScript聚焦于第一个字段的代码
Oct 15 Javascript
jQuery 源码分析笔记(5) jQuery.support
Jun 19 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
May 08 Javascript
jquery批量设置属性readonly和disabled的方法
Jan 24 Javascript
js中style.display=&quot;&quot;无效的解决方法
Oct 30 Javascript
PHP结合jQuery实现的评论顶、踩功能
Jul 22 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
Aug 06 Javascript
vue组件watch属性实例讲解
Nov 07 Javascript
微信小程序实现消息框弹出动画
Apr 18 Javascript
Vue 3.0 全家桶抢先体验
Apr 28 Javascript
Vue elementui字体图标显示问题解决方案
Aug 18 Javascript
vue如何使用rem适配
Feb 06 #Vue.js
如何管理Vue中的缓存页面
Feb 06 #Vue.js
JS中锚点链接点击平滑滚动并自由调整到顶部位置
Feb 06 #Javascript
一起深入理解js中的事件对象
Feb 06 #Javascript
手动实现vue2.0的双向数据绑定原理详解
Feb 06 #Vue.js
vue3.0 自适应不同分辨率电脑的操作
Feb 06 #Vue.js
vue使用echarts画组织结构图
Feb 06 #Vue.js
You might like
PHP 全角转半角实现代码
2010/05/16 PHP
discuz的php防止sql注入函数
2011/01/17 PHP
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
解析dedeCMS验证码的实现代码
2013/06/07 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
php取出数组单个值的方法
2018/03/12 PHP
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
Web 开发中Ajax的Session 超时处理方法
2017/01/19 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
Java设计中的Builder模式的介绍
2018/03/22 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
python web框架学习笔记
2016/05/03 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
如何在Python对Excel进行读取
2020/06/04 Python
为什么python比较流行
2020/06/19 Python
Python扫描端口的实现
2021/01/25 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
幼儿教师自我鉴定
2013/11/02 职场文书
大学生涯自我鉴定
2014/01/16 职场文书
操行评语大全
2014/04/30 职场文书
学生安全责任书范本
2014/07/24 职场文书
软件测试专业推荐信
2014/09/18 职场文书
结婚通知短信大全
2015/04/17 职场文书
陪护人员误工证明
2015/06/24 职场文书
高三物理教学反思
2016/02/20 职场文书