服务器之家:专注于服务器技术及软件下载分享
分类导航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服务器之家 - 编程语言 - JavaScript - js教程 - js实现类选择器和name属性选择器的示例步骤

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

2022-01-19 15:09豫见陈公子 js教程

这篇文章主要介绍了js实现类选择器和name属性选择器的示例步骤,帮助大家更好的理解和使用js,感兴趣的朋友可以了解下

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

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

类选择器:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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属性选择器跟类选择器一样,只是判断条件稍微变了一下而已:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/**
 * 递归获取所有子节点
 *
 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属性选择器的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/tnnyang/p/11039058.html

延伸 · 阅读

精彩推荐
  • js教程js实现有趣的倒计时效果

    js实现有趣的倒计时效果

    这篇文章主要为大家详细介绍了js实现有趣的倒计时效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    搬砖大法4422022-01-04
  • js教程原生js实现自定义滚动条组件

    原生js实现自定义滚动条组件

    这篇文章主要为大家详细介绍了原生js实现自定义滚动条组件的开发,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    蒲公英芽11422022-01-05
  • js教程Javascript实现打鼓效果

    Javascript实现打鼓效果

    这篇文章主要为大家详细介绍了Javascript实现打鼓效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    qq_413093507472022-01-11
  • js教程js定时器出现第一次延迟的原因及解决方法

    js定时器出现第一次延迟的原因及解决方法

    在本篇文章里小编给大家整理的是一篇关于js定时器出现第一次延迟的原因及解决方法,对此有需要的朋友们可以学习下。...

    宋宋大人4972021-12-24
  • js教程JS removeAttribute()方法实现删除元素的某个属性

    JS removeAttribute()方法实现删除元素的某个属性

    这篇文章主要介绍了JS removeAttribute()方法实现删除元素的某个属性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    C语言中文网7762021-12-30
  • js教程js删除对象中的某一个字段的方法实现

    js删除对象中的某一个字段的方法实现

    这篇文章主要介绍了js删除对象中的某一个字段的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    兔子零847342021-12-29
  • js教程JavaScript实现下拉列表

    JavaScript实现下拉列表

    这篇文章主要为大家详细介绍了JavaScript实现下拉列表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    编程的牛牛11712022-01-05
  • js教程JS实现简单抖动效果

    JS实现简单抖动效果

    这篇文章给大家结束了通过js实现抖动效果,非常不错,具有参考借鉴价值,感兴趣的朋友参考下吧...

    catEatBird9142022-01-12