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 相关文章推荐
Eclipse去除js(JavaScript)验证错误
Feb 11 Javascript
JavaScript参数个数可变的函数举例说明
Oct 10 Javascript
快速学习AngularJs HTTP响应拦截器
Dec 31 Javascript
第五章之BootStrap 栅格系统
Apr 25 Javascript
jQuery动态加载css文件实现方法
Jun 15 Javascript
jQuery时间验证和转换为标准格式的时间格式
Mar 06 Javascript
详解webpack之scss和postcss-loader的配置
Jan 09 Javascript
vue组件中使用props传递数据的实例详解
Apr 08 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
Aug 24 Javascript
使用element-ui table expand展开行实现手风琴效果
Mar 15 Javascript
layer.alert回调函数执行关闭弹窗的实例
Sep 11 Javascript
el-table-column 内容不自动换行的解决方法
Aug 14 Vue.js
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
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
2020/02/10 PHP
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
js实现点击添加一个input节点
2014/12/05 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
Angular.Js的自动化测试详解
2016/12/09 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
JS监听组合按键思路及实现过程
2020/04/17 Javascript
python33 urllib2使用方法细节讲解
2013/12/03 Python
python 基础教程之Map使用方法
2017/01/17 Python
python实现贪吃蛇游戏
2020/03/21 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
Keras load_model 导入错误的解决方式
2020/06/09 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
美国校服网上商店:French Toast
2019/10/08 全球购物
Linux的文件类型
2016/07/05 面试题
科室工作的个人自我评价
2013/10/30 职场文书
元宵节晚会主持人串词
2014/03/25 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
环境卫生倡议书
2014/08/29 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
小学元宵节活动总结
2015/02/06 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书