当前位置: 首页 > 面试题库 >

HTMLCollection,NodeList和对象数组之间的区别

傅振濂
2023-03-14
问题内容

对于DOM,我一直对HTMLCollections,对象和数组感到困惑。例如…

  1. document.getElementsByTagName("td")和之间有什么区别$("td")
  2. $("#myTable")$("td")是对象(jQuery的对象)。为什么console.log还会在它们旁边显示DOM元素的数组,而它们不是对象也不是数组?
  3. 什么是难以捉摸的“ NodeLists”,以及如何选择一个?

还请提供以下脚本的任何解释。

谢谢

[123,"abc",321,"cba"]=[123,"abc",321,"cba"]
{123:123,abc:"abc",321:321,cba:"cba"}=Object { 123=123, abc="abc", 321=321, more...}
Node= Node { ELEMENT_NODE=1, ATTRIBUTE_NODE=2, TEXT_NODE=3, more...}
document.links= HTMLCollection[a #, a #]
document.getElementById("myTable")= <table id="myTable">
document.getElementsByClassName("myRow")= HTMLCollection[tr.myRow, tr.myRow]
document.getElementsByTagName("td")= HTMLCollection[td, td, td, td]
$("#myTable")= Object[table#myTable]
$("td")= Object[td, td, td, td]


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
        <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /> 
        <title>Collections?</title>  
        <script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script> 
        <script type="text/javascript">
            $(function(){
                console.log('[123,"abc",321,"cba"]=',[123,"abc",321,"cba"]);
                console.log('{123:123,abc:"abc",321:321,cba:"cba"}=',{123:123,abc:"abc",321:321,cba:"cba"});
                console.log('Node=',Node);
                console.log('document.links=',document.links);
                console.log('document.getElementById("myTable")=',document.getElementById("myTable"));
                console.log('document.getElementsByClassName("myRow")=',document.getElementsByClassName("myRow"))
                console.log('document.getElementsByTagName("td")=',document.getElementsByTagName("td"));
                console.log('$("#myTable")=',$("#myTable"));
                console.log('$("td")=',$("td"));
            });
        </script>
    </head>

    <body>
        <a href="#">Link1</a>
        <a href="#">Link2</a>
        <table id="myTable">
            <tr class="myRow"><td>td11</td><td>td12</td></tr>
            <tr class="myRow"><td>td21</td><td>td22</td></tr>
        </table>
    </body> 
</html>

问题答案:

首先,我将解释之间的差异NodeListHTMLCollection

两个接口是 集合
DOM节点。它们在提供的方法和可以包含的节点类型方面有所不同。尽管NodeList可以包含任何节点类型,但是HTMLCollection假定仅包含元素节点。
一个HTMLCollection提供相同的方法作为一个NodeList和另外一个被调用的方法namedItem

当必须提供对多个节点的访问时,总是使用集合,例如,大多数选择器方法(例如getElementsByTagName)返回多个节点或获取对所有子节点的引用(element.childNodes)。

有关更多信息,请查看DOM4规范-Collections。

document.getElementsByTagName("td")和之间有什么区别$("td")

getElementsByTagName是DOM接口的方法。它接受标记名称作为输入并返回HTMLCollection(请参阅DOM4规范)。

$("td")大概是jQuery。它接受任何有效的CSS / jQuery选择器并返回jQuery对象。

标准DOM集合和jQuery选择之间的最大区别是DOM集合 通常是
实时的(尽管并非所有方法都返回实时集合),即,如果DOM的任何更改受到影响,都会反映在集合中。它们就像是DOM树上的 视图
,而jQuery选择是调用函数时DOM树的快照。

为什么console.log还会在它们旁边显示DOM元素的数组,而它们不是对象也不是数组?

jQuery对象是 类似于数组的
对象,即它们具有数值属性和一个length属性(请记住,数组本身就是对象本身)。浏览器倾向于以特殊方式显示数组和类似数组的对象,例如[ ... , ... , ... ]

什么是难以捉摸的“ NodeLists”,以及如何选择一个?

请参阅我的答案的第一部分。您不能 选择 NodeList s,它们是 选择结果

据我所知,甚至没有办法以NodeList编程方式创建s(即创建一个空的并稍后添加节点),它们仅由某些DOM方法/属性返回。



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

  • 问题内容: 您能否简单地解释一下Transfer对象和Domain对象之间的区别?如果您可以举一个Java示例,那就太好了。 问题答案: DTO没有任何逻辑。他们只有字段(州)。在将数据从一个层/子系统传输到另一层/子系统时使用它们 域对象可以具有逻辑(取决于您使用的是域驱动设计还是贫乏的数据模型),并且它们通常与数据库结构相关。 如果使用贫乏的数据模型(即您的域对象没有任何逻辑),则DTO和域对

  • 问题内容: 声明 Array 和 Dictionary的 更好方法,我都使用了: 对我来说,编码方面的速度非常快,但实际上两者在编译器和性能方面有何不同,我们应该遵循哪一个? 问题答案: 从Swift上的iOS开发者库… Swift数组的类型完整写为Array ,其中Element是允许数组存储的值的类型。您还可以将简写形式的数组类型写为[Element]。尽管 这两种形式在功能上是相同的 ,但

  • 主要内容:1. 属性,2. 方法对象指定有序节点集合的抽象。 中的项目可通过整数索引访问,它的索引从开始。 1. 属性 下表列出了对象的属性 - 属性 类型 描述 length 它给出了节点列表中的节点数。 2. 方法 以下是对象的唯一方法。 序号 方法 描述 1 item() 它返回集合中的索引项。 如果索引大于或等于列表中的节点数,则返回。

  • 问题内容: 我是Kotlin的新手,最近将一个简单文件从Java转换为Kotlin。我想知道为什么Android转换器将我的java类更改为Kotlin对象。 Java: 转换的Kotlin: 为什么不呢? 任何帮助将不胜感激谢谢。 问题答案: Kotlin对象就像一个无法实例化的类,因此必须按名称进行调用。(本身是静态类) android转换器看到您的类仅包含静态方法,因此将其转换为Kotlin

  • 问题内容: Java中的List和Array有什么区别?或Array和Vector之间的区别! 问题答案: 通常(在Java中),数组是一种数据结构,通常由存储对象集合的顺序存储器组成。 是Java中的接口,这意味着它可能具有多种实现。这些实现之一是,这是一个使用数组作为数据结构来实现接口行为的类。 还有许多其他实现该接口的类。查看它们的一种简单方法是查看以下位置的Javadoc :http :