js便签笔记(1)——说说HTMLCollection、NodeList以及NamedNodeMap
介绍
在js的dom操作中,除了常用的document、html**Element之外,还有三个集合对象,即HTMLCollection、NodeList以及NamedNodeMap。试看以下操作:
var divs = document.getElementsByTagName("div");
alert(divs instanceof HTMLCollection); //true (chrome中返回false,divs是NodeList对象)
var div = document.getElementById("div1");
var children = div.childNodes; //获取div元素子节点集合
alert(children instanceof NodeList); //true
var attrs = div.attributes; //获取div元素的特性
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)
js便签笔记(1)——说说HTMLCollection、NodeList以及NamedNodeMap的更多相关文章
- js便签笔记(12)——浏览TOM大叔博客的学习笔记 part2
1. 前言 昨天写了<js便签笔记(11)——浏览TOM大叔博客的学习笔记 part1>,简单记录了几个问题.part1的重点还是在于最后那个循环创建函数的问题,也就是多个子函数公用一个闭 ...
- js便签笔记(2)——DOM元素的特性(Attribute)和属性(Property)
1.介绍: 上篇js便签笔记http://www.cnblogs.com/wangfupeng1988/p/3626300.html最后提到了dom元素的Attribute和Property,本文简单 ...
- js便签笔记(11)——浏览TOM大叔博客的学习笔记 part1
1. 前言 这两天看了一下TOM大叔的<深入理解js系列>中的基础部分,根据自己的实际情况,做了读书笔记,记录了部分容易绊脚的问题.写篇文章,供大家分享. 2. 关于HTMLCollect ...
- js便签笔记(10) - 分享:json2.js源码解读笔记
1. 如何理解“json” 首先应该意识到,json是一种数据转换格式,既然是个“格式”,就是个抽象的东西.它不是js对象,也不是字符串,它只是一种格式,一种规定而已. 这个格式规定了如何将js对象转 ...
- js便签笔记(10) - 分享:json.js源码解读笔记
1. 如何理解“json” 首先应该意识到,json是一种数据转换格式,既然是个“格式”,就是个抽象的东西.它不是js对象,也不是字符串,它只是一种格式,一种规定而已. 这个格式规定了如何将js对象转 ...
- js便签笔记(9)——解读jquery源码时记录的一些知识点
近来一直利用业余时间在看jquery2.1.1源码,大约看了两千行了.平时看的时候,做了一些笔记,贴出来分享. 1. Array.prototype.slice.call 可以将伪数组转化为真正的数组 ...
- js便签笔记(3)——切记:appendChild()、insertBefore()是移动element节点!
appendChild().insertBefore()是移动element节点,看书的时候注意过,也可以做一个简单的例子测试一下: <div id="div1"> & ...
- js便签笔记(13)——jsonp其实很简单【ajax跨域请求】
前两天被问到ajax跨域如何解决,还真被问住了,光知道有个什么jsonp,迷迷糊糊的没有说上来.抱着有问题必须解决的态度,我看了许多资料,原来如此... 为何一直知道jsonp,但一直迷迷糊糊的不明白 ...
- js便签笔记(13)——jsonp事实上非常easy【ajax跨域请求】
前两天被问到ajax跨域怎样解决,还真被问住了,光知道有个什么jsonp,迷迷糊糊的没有说上来.抱着有问题必须解决的态度,我看了很多资料,原来如此.. . 为何一直知道jsonp,但一直迷迷糊糊的不明 ...
随机推荐
- 在 JNI 编程中避免内存泄漏与崩溃
JNI 编程简介 JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互——在 Java 程序中 ...
- MFC中和定时器使用
在MFC中和定时器相关的有三个函数: 1.设置定时器(定义一个定时器的属性): SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBAC ...
- What if you are involved in an automobile accident in the US
What if you are involved in an automobile accident in the US With increasing Chinese tourists and vi ...
- shell模拟“多线程”
shell中并没有真正意义上的多线程,要实现"多线程"可以启动多个子进程,并将子进程放入后台执行来模拟多线程,最大程度利用CPU性能. 循环中执行并行代码 #!/bin/bas ...
- asp.net—单例模式
一.单例模式是什么? 定义:确保一个类仅仅能产生一个实例,并且提供一个全局访问点来获取该实例. 二.单例模式怎么用? class SingleCase { public string Name{get ...
- wpf控件拖动
Thumb 拖动 上代码! <Window x:Class="Thumb控件移动.MainWindow" xmlns="http://schemas.microso ...
- 基于EasyUi的datagrid合并单元格JS写法
$('#dg').datagrid({ width: 'auto', height: 'auto', scrollbarSize: , queryParams: {}, url: 'kkkk', co ...
- 【cocos2d-x 手游研发----怪物智能AI】
原创文章,转载请注明出处:http://www.cnblogs.com/zisou/p/cocos2d-xARPG4.html 谈到怪物AI,我觉得就比较话多了,首先理解一下(Artificial I ...
- 201621123018《Java程序设计》第2周学习报告
Week02-Java基本语法与类库 1.本周学习总结 Java数据类型分为基本数据类型和引用数据类型.布尔型是Java特有的数据类型.本周重点学习了字符串类型String,String类型中==和e ...
- Mac OS 10.12 - 解决“bad interpreter: No such file or directory”问题!
在Mac OS10.12里面执行shell脚本时候,无法执行,错误提示:“bad interpreter: No such file or directory”,经过上网搜索,最终解决了,解决方法,首 ...