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 相关文章推荐
js的toUpperCase方法用法实例
Jan 27 Javascript
纯css实现窗户玻璃雨滴逼真效果
Aug 23 Javascript
js实现拉幕效果的广告代码
Sep 02 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
Sep 14 Javascript
超实用的JavaScript代码段 附使用方法
May 22 Javascript
关于Javascript回调函数的一个妙用
Aug 29 Javascript
原生JS实现图片左右轮播
Dec 30 Javascript
angularjs点击图片放大实现上传图片预览
Feb 24 Javascript
VUE axios发送跨域请求需要注意的问题
Jul 06 Javascript
JS中验证整数和小数的正则表达式
Oct 08 Javascript
微信小程序如何获取用户头像和昵称
Sep 23 Javascript
javascript实现左右缓动动画函数
Nov 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
php 模拟POST提交的2种方法详解
2013/06/17 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
IE的有条件注释判定IE版本详解(附实例代码)
2012/01/04 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
浅析javascript函数表达式
2016/02/10 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
React Native 环境搭建的教程
2017/08/19 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
NodeJS实现自定义流的方法
2018/08/01 NodeJs
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
Vue性能优化的方法
2020/07/30 Javascript
Js实现粘贴上传图片的原理及示例
2020/12/09 Javascript
Python实现读取文件最后n行的方法
2017/02/23 Python
Python数据分析之如何利用pandas查询数据示例代码
2017/09/01 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
python 穷举指定长度的密码例子
2020/04/02 Python
keras实现多种分类网络的方式
2020/06/11 Python
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
杭州龙健科技笔试题.net部分笔试题
2016/01/24 面试题
汽车工程专业应届生求职信
2013/10/19 职场文书
食品安全演讲稿
2014/09/01 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
西柏坡观后感
2015/06/08 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书