(一)类数组对象NodeList
NodeList对象的特点:
NodeList是一种类数组对象,用于保存一组有序的节点。
可以通过方括号语法来访问NodeList的值,有item方法与length属性。
它并不是Array的实例,没有数组对象的方法。
通过demo简单了解一下NodeList:
html:
<ul id="box">
<li>节点一</li>
<li>节点二</li>
<li>节点三</li>
</ul>
Js:
var oUl = document.getElementById("box")
var nodes = oUl.childNodes
console.log(nodes)
console.log(nodes[1]);
console.log(nodes.item(1));
控制台结果如下:

可见其原型对象为 NodeList,有item方法与length属性。
为什么说NodeList是类数组,不是真正的数组:
var oUl = document.getElementById("box")
var nodes = oUl.childNodes
nodes.push("<li>节点四</li>");
控制台结果如下:

说明nodes没有push()方法,不是数组。
那么我们如何将类数组转化为数组呢?
方法一:
var oUl = document.getElementById("box");
var nodes = oUl.childNodes;
//nodes.push("<li>节点四</li>");
function makeArray(nodeList) {
var arr = [];
for(var i=0,l=nodeList.length; i<l; i++){
arr[i] = nodeList[i]
}
return arr
}
var newNodeList = makeArray(nodes);
newNodeList.push("<li>节点四</li>");
console.log(newNodeList)
结果如下:

此时这个数组的原型对象是Array。
方法二:
var oUl = document.getElementById("box");
var nodes = oUl.childNodes;
function makeArray(nodeList) {
return Array.prototype.slice.call(nodeList);
}
var newNodeList = makeArray(nodes);
newNodeList.push("<li>节点四</li>");
console.log(newNodeList)
结果如下:

使用call方法在IE8及更低版本浏览器中存在兼容问题,解决方案如下:
1、使用apply方法(摘自:https://www.cnblogs.com/wangmeijian/p/4936939.html):
Array.prototype.concat.apply([],nodes).slice(0)
2、上代码:
var box = document.getElementById("box");
var nodes = box.childNodes;
function makeArray(nodeList){
var arr = null;
try {
return Array.prototype.slice.call(nodeList);
}catch (e){
arr = new Array();
for(var i = 0, len = nodeList.length; i < len; i++){
arr.push(nodeList[i]);
}
}
return arr;
}
var newNodeList = makeArray(nodes);
newNodeList.push("<li>节点四</li>");
console.log(newNodeList);
(一)类数组对象NodeList的更多相关文章
- js中的类数组对象---NodeList
动态 NodeList 这是文档对象模型(DOM,Document Object Model)中的一个大坑. NodeList 对象(以及 HTML DOM 中的 HTMLCollection对象)是 ...
- NodeList类数组对象: HTMLCollection , NamedNodeMap,两套API(childNodes , children)
快捷键:leishuzuduixiang(类数组对象) bianlijiedian(遍历节点) jiedian(节点) htmlcollection , namednodemap , nodel ...
- 简述JavaScript对象、数组对象与类数组对象
问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...
- [Effective JavaScript 笔记]第51条:在类数组对象上复用通用的数组方法
前面有几条都讲过关于Array.prototype的标准方法.这些标准方法被设计成其他对象可复用的方法,即使这些对象并没有继承Array. arguments对象 在22条中提到的函数argument ...
- 将类数组对象(array-like object)转化为数组对象(Array object)
用法:Array.prototype.slice.call(array-like object) // 创建一个类数组对象 var alo = {0:"a", 1:"b& ...
- JavaScript类数组对象参考
JavaScript和DOM中有很多类数组对象,它们有以下特点 1.有length属性 2.可以使用[]通过下标访问 3.部分类数组对象使用[]访问成员时不只可以使用下标,还可以使用id或name 4 ...
- 浅谈JavaScript和DOM中的类数组对象
JavaScript是一门弱类型语言,它的数据类型分为两大类:简单数据类型(5种:Undefined.Null.Boolean.Number.String)和复杂数据类型(1种:Object).Obj ...
- 如何在JavaScript中手动创建类数组对象
前言 关于什么是js的类数组对象这里不再赘述.可以参考这个链接,还有这里. js中类数组对象很多,概念简单的讲就是看上去像数组,又不是数组,可以使用数字下标方式访问又没有数组方法. 例: argume ...
- Effective JavaScript Item 51 在类数组对象上重用数组方法
Array.prototype对象上的标准方法被设计为也能够在其他对象上重用 - 即使不是继承自Array的对象. 因此,在JavaScript中存折一些类数组对象(Array-like Object ...
随机推荐
- 远程连接排错-屌丝去洗浴中心之路(windows)
1.查看道路是否通畅 ip地址是什么:就是我们要找的服务器在哪里 公网IP地址:全世界的任何地方都能访问到 私网IP地址:也指内网,私有环境,只在当前环境中.比如:192.168.0.??? 或者 1 ...
- python笔记31-使用ddt报告出现dict() -> new empty dictionary dict(mapping) 问题解决
使用ddt框架生成html报告的时候,出现:dict() -> new empty dictionary dict(mapping) -> new dictionary initializ ...
- 关于xampp中无法启动mysql,Attempting to start MySQL service...的解决办法!!
最近在学习服务器方面的知识,找到了这款功能强大的建站集成软件包——xampp.但是在开数据库服务器的时候,出现了这种情况.一直在Attemptng to start MySQL service... ...
- 【转】MFC内嵌cef3浏览器内核
一.cef3内核的下载 可以从http://opensource.spotify.com/cefbuilds/index.html下载,注意:很多版本编译都可以通过 但是运行的时候会崩溃,以cef_b ...
- 开源版本PowerShell Core 6.2 发布
导读 PowerShell Core 6.2 GA 已发布,PowerShell Core 是 PowerShell 的开源版本,适用于 Linux,macOS 和 Windows. 有关 Power ...
- Windows10下使用python+selenium实现谷歌浏览器的自动控制
第一 谷歌浏览器一直是开发人员最喜欢的浏览器,python爬虫在进行抓包时尤其好用,今天为大家带来python+selenium进行自动化控制的安装教程 安装selenium windows下在cmd ...
- 理解Shadow DOM(一)
1. 什么是Shadow DOM? Shadow DOM 如果按照英文翻译的话可以理解为 影子DOM, 何为影子DOM呢?可以理解为一般情况下使用肉眼看不到的DOM结构,那如果一般情况下看不到的话,那 ...
- 线程的synchronized、volatile及原子操作
public class ThreadDemo7{ //structs2线程不安全 共享变量 //n++ 复合操作 对于volatile修饰的变量不安全 //原子操作 int value; //让方法 ...
- ODOO(ERP源码安装)
cat /etc/centos-release CentOS Linux release 7.4.1708 (Core) uname -r 3.10.0-693.el7.x86_64 IP:192.1 ...
- BZOJ1063 NOI2008 道路设计 树形DP
题目传送门: BZOJ 题意精简版:给出一棵树,在一种方案中可以将树的若干链上的所有边的边权改为$0$,但需要保证任意两条链之间没有交点.问最少的一种方案,使得从根节点到其他节点经过的边的边权和的最大 ...