js便签笔记(1)——说说HTMLCollection、NodeList以及NamedNodeMap
介绍
在js的dom操作中,除了常用的document、html**Element之外,还有三个集合对象,即HTMLCollection、NodeList以及NamedNodeMap。试看以下操作:
1 var divs = document.getElementsByTagName("div"); 2 alert(divs instanceof HTMLCollection); //true (chrome中返回false,divs是NodeList对象) 3 4 var div = document.getElementById("div1"); 5 6 var children = div.childNodes; //获取div元素子节点集合 7 alert(children instanceof NodeList); //true 8 9 var attrs = div.attributes; //获取div元素的特性 10 alert(children instanceof NamedNodeMap); //true
以上代码中,chrome下的document.getElementsByTagName("div")将返回NodeList对象。
这三个对象都是“类数组”,可以获取他们的length,也可以通过 attrs[0] 获取数据,有点类似与函数里面的arguments。
NamedNodeMap和Attr
div.attrbutes将返回一个NamedNodeMap对象,即NamedNodeMap存储是的div的“特性Attribute”集合。而集合中的每一个元素,都是Attr类型的对象。Attr对象有三个属性,name、value和specified。
但是在日常应用中,一般会应用getAttribute()、setAttribute()和romoveAttribute()来操作特性,不需要直接访问特性对象。
另外,dom元素的“特性”(Attribute)和“属性”(property)是不一样的,两者要分清楚,我会在以后的文章中专门讲解。(补:http://www.cnblogs.com/wangfupeng1988/p/3631853.html)
所谓“动态”
HTMLCollection、NodeList以及NamedNodeMap这三个集合都是“动态的”,每当文档发生变化时,他们都会更新。他们将始终保持这最新、最准确的消息。且看以下程序:
var divs = document.getElementsByTagName("div"), i, div; for (i = 0; i < divs.length; i++) { div = document.createElement("div"); document.body.appendChild(div); }
以上代码是个死循环!
为何?就因为divs是通过getElementsByTagName()获取的htmlCollection集合,它是“动态”的。每次执行document.body.appendChild(div)时候,divs.length都会增加。
总结
1. 要了解 HTMLCollection、NodeList以及NamedNodeMap 三种集合类型;
2. 他们都是“类数组”;
3. 知道他们的“动态性”,这个很重要;
4. 特性和属性不同,后续会专门讲解。 (补:http://www.cnblogs.com/wangfupeng1988/p/3631853.html)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?