3 回答

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
首先,我將解釋之間的差異NodeList和HTMLCollection。
兩個(gè)接口是集合 DOM節(jié)點(diǎn)。它們?cè)谔峁┑姆椒ê退鼈兛梢园墓?jié)點(diǎn)類型方面有所不同。雖然a NodeList可以包含任何節(jié)點(diǎn)類型,但是HTMLCollection應(yīng)該只包含Element節(jié)點(diǎn)。
An HTMLCollection提供與a NodeList和另外一種方法相同的方法namedItem。
當(dāng)必須向多個(gè)節(jié)點(diǎn)提供訪問(wèn)時(shí)總是使用集合,例如,大多數(shù)選擇器方法(例如getElementsByTagName)返回多個(gè)節(jié)點(diǎn)或獲取對(duì)所有子節(jié)點(diǎn)的引用(element.childNodes)。
有關(guān)更多信息,請(qǐng)查看DOM4規(guī)范 - 集合。
document.getElementsByTagName("td")和之間有什么區(qū)別$("td")?
getElementsByTagName是DOM接口的方法。它接受標(biāo)記名稱作為輸入并返回HTMLCollection(參見(jiàn)DOM4規(guī)范)。
$("td")大概是jQuery。它接受任何有效的CSS / jQuery選擇器并返回一個(gè)jQuery對(duì)象。
標(biāo)準(zhǔn)DOM集合和jQuery選擇之間的最大區(qū)別在于DOM集合通常是實(shí)時(shí)的(并非所有方法都返回實(shí)時(shí)集合),即如果受到影響,對(duì)DOM的任何更改都會(huì)反映在集合中。它們就像DOM樹(shù)上的視圖,而jQuery選擇是調(diào)用函數(shù)時(shí)DOM樹(shù)的快照。
為什么console.log還會(huì)在它們旁邊顯示DOM元素?cái)?shù)組,它們不是對(duì)象而不是數(shù)組?
jQuery對(duì)象是類似于數(shù)組的對(duì)象,即它們具有數(shù)字屬性和length屬性(請(qǐng)記住,數(shù)組本身就是對(duì)象)。瀏覽器傾向于以特殊方式顯示數(shù)組和類似數(shù)組的對(duì)象,例如[ ... , ... , ... ]。
什么是難以捉摸的“NodeLists”,我如何選擇一個(gè)?
請(qǐng)參閱我的答案的第一部分。你不能選擇 NodeList s,它們是選擇的結(jié)果。
據(jù)我所知,甚至沒(méi)有一種以NodeList編程方式創(chuàng)建s 的方法(即創(chuàng)建一個(gè)空的并稍后添加節(jié)點(diǎn)),它們僅由一些DOM方法/屬性返回。

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊
0. a和a有什么區(qū)別?HTMLCollectionNodeList
以下是一些定義。
DOM Level 1 Spec - 其他對(duì)象定義:
接口HTMLCollection
HTMLCollection是節(jié)點(diǎn)列表??梢酝ㄟ^(guò)序數(shù)索引或節(jié)點(diǎn)的名稱或id屬性來(lái)訪問(wèn)單個(gè)節(jié)點(diǎn)。注意:HTML DOM中的集合被假定為實(shí)時(shí),這意味著它們會(huì)在更改基礎(chǔ)文檔時(shí)自動(dòng)更新。
DOM Level 3 Spec - NodeList
接口NodeList
NodeList接口提供有序節(jié)點(diǎn)集合的抽象,而不定義或約束此集合的實(shí)現(xiàn)方式。DOM中的NodeList對(duì)象是實(shí)時(shí)的。
NodeList中的項(xiàng)可通過(guò)整數(shù)索引訪問(wèn),從0開(kāi)始。
因此,它們都可以包含實(shí)時(shí)數(shù)據(jù),這意味著DOM將在其值發(fā)生時(shí)更新。它們還包含一組不同的功能。
如果您運(yùn)行腳本,tableDOM元素包含a childNodes NodeList[2]和a,您將注意到是否檢查控制臺(tái)children HTMLCollection[1]。他們?yōu)槭裁床煌??因?yàn)镠TMLCollection只能包含元素節(jié)點(diǎn),所以NodeList還包含一個(gè)文本節(jié)點(diǎn)。
在此輸入圖像描述
1. document.getElementsByTagName("td")和之間有什么區(qū)別$("td")?
document.getElementsByTagName("td")返回DOM元件的陣列(一NodeList),$("td")被稱為jQuery對(duì)象,其具有從所述元件document.getElementsByTagName("td")上其屬性0,1,2等,主要的區(qū)別是,jQuery對(duì)象是慢一點(diǎn)來(lái)檢索,但可訪問(wèn)所有的方便jQuery函數(shù)。
2. $("#myTable")和$("td")是對(duì)象(jQuery對(duì)象)。為什么console.log還在它們旁邊顯示DOM元素?cái)?shù)組,它們不是對(duì)象而不是數(shù)組?
他們對(duì)自己的屬性的對(duì)象0,1,2等設(shè)置為DOM元素。這是一個(gè)簡(jiǎn)單的例子:它是如何工作的:
的jsfiddle
var a = {
1: "first",
2: "second"
}
alert(a[1]);
3.什么是難以捉摸的“NodeLists”,我該如何選擇?
您一直在代碼中檢索它們,getElementsByClassName并getElementsByTagName返回NodeLists

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
附加說(shuō)明
HTMLCollection和NodeList有什么區(qū)別?
一的HTMLCollection只包含元素節(jié)點(diǎn)(標(biāo)簽)和節(jié)點(diǎn)列表包含了所有的節(jié)點(diǎn)。
有四種節(jié)點(diǎn)類型:
元素節(jié)點(diǎn)
屬性節(jié)點(diǎn)
文本節(jié)點(diǎn)
評(píng)論節(jié)點(diǎn)
nodeTypes
元素內(nèi)的空格被視為文本,文本被視為節(jié)點(diǎn)。
考慮以下:
<ul id="myList">
<!-- List items -->
<li>List item 1</li>
<li>List item 2</li>
<li>List item 3</li>
<li>List item 4</li>
<li>List item 5</li>
</ul>
空白: <ul id="myList"> <li>List item</li></ul>
沒(méi)有空格: <ul id="myList"><li>List item</li></ul>
添加回答
舉報(bào)