亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

HTMLCollection,NodeLists和對象數組之間的區別

HTMLCollection,NodeLists和對象數組之間的區別

繁華開滿天機 2019-08-30 10:56:27
HTMLCollection,NodeLists和對象數組之間的區別在DOM方面,我一直對HTMLCollections,對象和數組感到困惑。例如...document.getElementsByTagName("td")和之間有什么區別$("td")?$("#myTable")并且$("td")是對象(jQuery對象)。為什么console.log還會在它們旁邊顯示DOM元素數組,它們不是對象而不是數組?什么是難以捉摸的“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>
查看完整描述

3 回答

?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

首先,我將解釋之間的差異NodeList和HTMLCollection。


兩個接口是集合 DOM節點。它們在提供的方法和它們可以包含的節點類型方面有所不同。雖然a NodeList可以包含任何節點類型,但是HTMLCollection應該只包含Element節點。

An HTMLCollection提供與a NodeList和另外一種方法相同的方法namedItem。


當必須向多個節點提供訪問時總是使用集合,例如,大多數選擇器方法(例如getElementsByTagName)返回多個節點或獲取對所有子節點的引用(element.childNodes)。


有關更多信息,請查看DOM4規范 - 集合。


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方法/屬性返回。


查看完整回答
反對 回復 2019-08-30
?
手掌心

TA貢獻1942條經驗 獲得超3個贊

0. a和a有什么區別?HTMLCollectionNodeList

以下是一些定義。


DOM Level 1 Spec - 其他對象定義:


接口HTMLCollection


HTMLCollection是節點列表??梢酝ㄟ^序數索引或節點的名稱或id屬性來訪問單個節點。注意:HTML DOM中的集合被假定為實時,這意味著它們會在更改基礎文檔時自動更新。


DOM Level 3 Spec - NodeList


接口NodeList


NodeList接口提供有序節點集合的抽象,而不定義或約束此集合的實現方式。DOM中的NodeList對象是實時的。


NodeList中的項可通過整數索引訪問,從0開始。


因此,它們都可以包含實時數據,這意味著DOM將在其值發生時更新。它們還包含一組不同的功能。


如果您運行腳本,tableDOM元素包含a childNodes NodeList[2]和a,您將注意到是否檢查控制臺children HTMLCollection[1]。他們為什么不同?因為HTMLCollection只能包含元素節點,所以NodeList還包含一個文本節點。


在此輸入圖像描述


1. document.getElementsByTagName("td")和之間有什么區別$("td")?

document.getElementsByTagName("td")返回DOM元件的陣列(一NodeList),$("td")被稱為jQuery對象,其具有從所述元件document.getElementsByTagName("td")上其屬性0,1,2等,主要的區別是,jQuery對象是慢一點來檢索,但可訪問所有的方便jQuery函數。


2. $("#myTable")和$("td")是對象(jQuery對象)。為什么console.log還在它們旁邊顯示DOM元素數組,它們不是對象而不是數組?

他們對自己的屬性的對象0,1,2等設置為DOM元素。這是一個簡單的例子:它是如何工作的:


的jsfiddle


    var a = {

        1: "first",

        2: "second"

    }

    alert(a[1]);

3.什么是難以捉摸的“NodeLists”,我該如何選擇?

您一直在代碼中檢索它們,getElementsByClassName并getElementsByTagName返回NodeLists


查看完整回答
反對 回復 2019-08-30
?
森林海

TA貢獻2011條經驗 獲得超2個贊

附加說明

HTMLCollection和NodeList有什么區別?

一的HTMLCollection只包含元素節點(標簽)和節點列表包含了所有的節點。


有四種節點類型:


元素節點

屬性節點

文本節點

評論節點

nodeTypes


元素內的空格被視為文本,文本被視為節點。


考慮以下:


<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>


沒有空格: <ul id="myList"><li>List item</li></ul>


查看完整回答
反對 回復 2019-08-30
  • 3 回答
  • 0 關注
  • 869 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號