ParentNode 接口,ChildNode 接口

节点都是单个对象,有时需要一种数据结构,能够容纳多个节点。DOM 提供两种节点集合,用于容纳多个节点:NodeList和HTMLCollection。这两种集合都属于接口规范。许多 DOM 属性和方法,返回的结果是NodeList实例或HTMLCollection实例。主要区别是,NodeList可以包含各种类型的节点,HTMLCollection只能包含 HTML 元素节点。

NodeList 接口

NodeList实例是一个类似数组的对象,它的成员是节点对象。通过以下方法可以得到NodeList实例。

Node.childNodes

document.querySelectorAll()等节点搜索方法

document.body.childNodes instanceof NodeList // true

NodeList实例很像数组,可以使用length属性和forEach方法。但是,它不是数组,不能使用pop或push之类数组特有的方法。但是具有length属性和forEach方法。除了使用forEach方法遍历 NodeList 实例,还可以使用for循环。

var children = document.body.childNodes;

for (var i = 0; i < children.length; i++) {

  var item = children[i];

}

NodeList.prototype.length

length属性返回 NodeList 实例包含的节点数量。

document.querySelectorAll(‘xxx‘).length

// 0

NodeList.prototype.forEach()

forEach方法用于遍历 NodeList 的所有成员。它接受一个回调函数作为参数,每一轮遍历就执行一次这个回调函数,用法与数组实例的forEach方法完全一致。

var children = document.body.childNodes;

children.forEach(function f(item, i, list) {

  // ...

}, this);

NodeList.prototype.item()

item方法接受一个整数值作为参数,表示成员的位置,返回该位置上的成员。

document.body.childNodes.item(0)

上面代码中,item(0)返回第一个成员。

如果参数值大于实际长度,或者索引不合法(比如负数),item方法返回null。如果省略参数,item方法会报错。

所有类似数组的对象,都可以使用方括号运算符取出成员。一般情况下,都是使用方括号运算符,而不使用item方法。

document.body.childNodes[0]

NodeList.prototype.keys(),NodeList.prototype.values(),NodeList.prototype.entries()

这三个方法都返回一个 ES6 的遍历器对象,可以通过for...of循环遍历获取每一个成员的信息。区别在于,keys()返回键名的遍历器,values()返回键值的遍历器,entries()返回的遍历器同时包含键名和键值的信息。

var children = document.body.childNodes;

for (var key of children.keys()) {

  console.log(key);

}

// 0

// 1

// 2

// ...

for (var value of children.values()) {

  console.log(value);

}

// #text

// <script>

// ...

for (var entry of children.entries()) {

  console.log(entry);

}

// Array [ 0, #text ]

// Array [ 1, <script> ]

// ...

HTMLCollection 接口

HTMLCollection是一个节点对象的集合,只能包含元素节点(element),不能包含其他类型的节点。它的返回值是一个类似数组的对象,但是与NodeList接口不同,HTMLCollection没有forEach方法,只能使用for循环遍历。HTMLCollection实例都是动态集合,节点的变化会实时反映在集合中。

HTMLCollection.prototype.length

length属性返回HTMLCollection实例包含的成员数量。

document.links.length // 18

HTMLCollection.prototype.item()

item方法接受一个整数值作为参数,表示成员的位置,返回该位置上的成员。

var c = document.images;

var img0 = c.item(0);

上面代码中,item(0)表示返回0号位置的成员。由于方括号运算符也具有同样作用,而且使用更方便,所以一般情况下,总是使用方括号运算符。

如果参数值超出成员数量或者不合法(比如小于0),那么item方法返回null。

HTMLCollection.prototype.namedItem()

namedItem方法的参数是一个字符串,表示id属性或name属性的值,返回对应的元素节点。如果没有对应的节点,则返回null。

// <img id="pic" src="http://example.com/foo.jpg">

var pic = document.getElementById(‘pic‘);

document.images.namedItem(‘pic‘) === pic // true

原文地址:https://www.cnblogs.com/hjy-21/p/12327558.html

时间: 2024-11-13 20:02:37

ParentNode 接口,ChildNode 接口的相关文章

C# 基础知识复习(十)---接口与接口继承

1.接口必须I开头: 2.只有申明,没有实现: 3.实现类在实现方法时,必须名字与接口一致: 4.实现类在实现继承接口时,必须把父接口的方法一并实现: 5.接口申明,默认是public的,这一点与class不同. C# 接口(Interface) 接口定义了所有类继承接口时应遵循的语法合同.接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分. 接口定义了属性.方法和事件,这些都是接口的成员.接口只包含了成员的声明.成员的定义是派生类的责任.

Delphi 的接口机制——接口操作的编译器实现过程(1)

学习COM编程技术也快有半个月了,这期间看了很多资料和别人的程序源码,也尝试了用delphi.C++.C#编写COM程序,个人感觉Delphi是最好上手的.C++的模版生成的代码太过复杂繁琐,大量使用编译宏替代函数代码,让初学者知其然而不知其所以然:C#封装过度,COM编程注定是要与操作系统频繁打交道的,需要调用大量API函数和使用大量系统预定义的常量与类型(结构体),这些在C#中都需手工声明,不够简便:Delphi就简单多了,通过模版创建的工程代码关系结构非常清晰,而且其能非常容易使用API函

接口、接口优点、接口的属性和方法特性、接口与继承的区别、接口与抽象类的区别、匿名实现类、JDK1.8新特性、打印类名称

接口里的属性,必须是公共的/默认的&静态的&Final&初始化后的属性: 接口里所有方法都是抽象的. 接口和继承---先天有的用继承,后天学习的用接口: 接口特性-------- 1.接口不可以被实例化: 2.实现类必须实现接口中所有方法,否则实现类必须是抽象类 3.实现类可以实现多个接口,来弥补Java不能多继承: 4.接口中的变量都是静态常量:(静态的-可以通过类的名字点-直接调用:) ----------------------------------------------

接口,接口的定义

接口interface,顾名思义,是为了一种事物与另一种事物进行交流提供的通道(手段),例如我们现在的操作系统是Windows系统,我们见到的界面和各个功能的按钮都是图形用户接口,接口就是用户和应用程序内部交互的界面.接口实际上有两种含义:一是一个类所具有的方法的特征集合,是一种逻辑上的抽像:二是java接口,java语言中存在的结构,有特定的语法和结构,前者叫做"接口"后者叫做"java接口".本节我们研究的是java接口. java中的接口是一系列方法的声明,是

PHP - 接口 - 多接口

/* * 使用多接口 */ //定义接口1 interface IPerosn_one{ public function eat(); } //定义接口2 interface IPerson_two{ public function run(); } //定义接口3 interface IPerson_three{ public function water(); } //定义继承自接口的类 class Menperson implements IPerosn_one,IPerson_two,I

类与类、类与接口、接口与接口之间的继承个数问题

1.类与类之间可以表示为继承的关系,用extends关键字表示的.这是因为如果一个类即继承了A类, 又继承了B类,若AB有两个相似的方法,没办法确定继承哪一个方法,所以类的继承只能是一对一的.但是一个类可以有多个子类, 一个类只能有一个父类. 2.类与接口之间可以表示为实现的关系,用implements关键字表示的.一个类可以实现多个接口.因为接口中的方法都是抽象的方法,只有形式没有具体实现,在类中实现.3.接口与接口之间之间可以表示为继承的关系,用extends关键字表示的,一个接口可以继承多

通过接口调用接口实现类实现松耦合(接口的多态)

项目开发在各个层中通过接口实现松耦合的时候,如何实现接口调用接口实现类? 这里的要求是接口有多个实现类,通过接口调用不的接口实现类! 开始,我想到了IOC(IOC最近忒火),确实有很多开发好的类库unity,ninject等等,但是这些类库都有点太强大了,例 如unity 是可以很容易实现我的要求,那么通过RegisterType<I, N>>(String name)注册:通过Resolve<I>(name) 就可以 用接口调用相应的接口实现类,如果想了解一下unity,

java接口、接口、类、抽象类的区别

1.定义 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 2.Java接口与接口区别 Java接口,Java语言中存在的结构,有特定的语法和结构. package jiekou; public interface AreaInterface{ double pai=Math.PI; double area(); } 以上程序就是Java接口,是一个结构: 接口,一个类所

什么是抽象类?什么是接口?接口和抽象类的区别在哪里?怎样去理解它们呢?

1.这里我们来参考一下博文. http://blog.csdn.net/fenglibing/article/details/2745123 接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? 接口和抽象类的概念不一样.接口是对动作的抽象,抽象类是对根源的抽象. 抽象类表示的是,这个对象是什么.接口表示的是,这个对象能做什么. 比如,男人,女人,这两个类(如果是类的话--),他们的抽象类是人.说明,他们都是人. 人可以吃东西,狗也可以吃东西,你可以把"吃东西"定义成一个接口,

类与类,类与接口,接口与接口的关系 学习

A:类与类,类与接口,接口与接口的关系 a:类与类: 继承关系,只能单继承,可以多层继承. b:类与接口: 实现关系,可以单实现,也可以多实现. 并且还可以在继承一个类的同时实现多个接口. c:接口与接口: 继承关系,可以单继承,也可以多继承. class Demo3_Interface { public static void main(String[] args) { System.out.println("Hello World!"); } } interface InterA