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 相关文章推荐
srcElement表格样式
Sep 03 Javascript
JAVASCRIPT下判断IE与FF的比较简单的方式
Oct 17 Javascript
jquery tools系列 expose 学习
Sep 06 Javascript
javascript学习笔记之函数定义
Jun 25 Javascript
实例讲解避免javascript冲突的方法
Jan 03 Javascript
ES6记录异步函数的执行时间详解
Aug 31 Javascript
js 实现一些跨浏览器的事件方法详解及实例
Oct 27 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
Nov 25 Javascript
JS解决移动web开发手机输入框弹出的问题
Mar 31 Javascript
Vue中Axios从远程/后台读取数据
Jan 21 Javascript
Nuxt.js 数据双向绑定的实现
Feb 17 Javascript
微信小程序scroll-view点击项自动居中效果的实现
Mar 25 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
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
jquery Validation表单验证使用详解
2020/09/12 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
总结Javascript中的隐式类型转换
2016/08/24 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
用python删除java文件头上版权信息的方法
2014/07/31 Python
Python实现字符串格式化的方法小结
2017/02/20 Python
python构建深度神经网络(DNN)
2018/03/10 Python
基于Python的PIL库学习详解
2019/05/10 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
Python OpenCV实现测量图片物体宽度
2020/05/27 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
For Art’s Sake官网:手工制作的奢华眼镜
2018/12/15 全球购物
网站域名和主机:Domain.com
2019/04/01 全球购物
高三政治教学反思
2014/02/06 职场文书
小学生母亲节演讲稿
2014/05/07 职场文书
一份文言文检讨书
2014/09/13 职场文书
楚门的世界观后感
2015/06/03 职场文书
安全守法证明
2015/06/23 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
利用Matlab绘制各类特殊图形的实例代码
2021/07/16 Python
python实现会员管理系统
2022/03/18 Python
postgresql如何找到表中重复数据的行并删除
2023/05/08 MySQL