DOM - NodeList、HTMLCollection和NamedNodeMap

DOM - NodeList穆律、HTMLCollection和NamedNodeMap

NodeList:
  • childNodes和 querySelectorAll() 方法返回值是NodeList灾梦;
  • 其中childNodes是動(dòng)態(tài)集合野舶, 而[querySelectorAll() 是靜態(tài)集合;
  • 由于NodeList是類數(shù)組對(duì)象巾遭,并不是真正的[數(shù)組]對(duì)象肉康,可以使用slice()方法將其變成真正的數(shù)組;
  • 但是灼舍,由于IE8-瀏覽器將NodeList實(shí)現(xiàn)為一個(gè)COM對(duì)象吼和,不能使用Array.prototype.slice()方法,必須手動(dòng)枚舉所有成員
<div id="test"></div>
<script>
var childN = test.childNodes;
console.log(childN instanceof Array);//false
function convertToArray(nodes){
    var array = null;
    try{
        array = Array.prototype.slice.call(nodes)
    }catch(ex){
        array = [];
        var len = nodes.length;
        for(var i = 0; i < len; i++){
            array.push(nodes[i]);
        }
    }
    return array;
}
var childNew = convertToArray(childN);
console.log(childNew instanceof Array);//true
</script>

HTMLCollection:
  • HTMLCollection 也是類數(shù)組對(duì)象骑素;
  • NodeList集合主要是Node節(jié)點(diǎn)的集合炫乓,而HTMLCollection集合主要是Element元素節(jié)點(diǎn)的集合。Node節(jié)點(diǎn)共有12種献丑,Element元素節(jié)點(diǎn)只是其中一種末捣。
  • HTMLCollection集合包括getElementsByTagName()、getElementsByClassName()创橄、getElementsByName()等方法的返回值箩做,以及children、document.links筐摘、document.forms等元素集合卒茬;
  • 所有的HTMLCollection對(duì)象都是動(dòng)態(tài)的船老;
  • 與NodeList對(duì)象類似,要想變成真正的數(shù)組Array對(duì)象圃酵,需要使用slice()方法柳畔,在IE8-瀏覽器中,則必須手動(dòng)枚舉所有成員郭赐;

NamedNodeMap:
  • NamedNodeMap的常見實(shí)例對(duì)象是 attributes屬性 薪韩;
  • 該對(duì)象也是一個(gè)動(dòng)態(tài)集合
  • 動(dòng)態(tài)集合是個(gè)很實(shí)用的概念,但在使用循環(huán)時(shí)一定要千萬(wàn)小心捌锭》荩可能會(huì)因?yàn)楹雎约系膭?dòng)態(tài)性观谦,造成死循環(huán)豁状;
var divs = document.getElementsByTagName("div");
for(var i = 0 ; i < divs.length; i++){
    document.body.appendChild(document.createElement("div"));
}
  • 在上面代碼中夭禽,由于divs是一個(gè)HTMLElement集合,divs.length會(huì)隨著appendChild()方法潮梯,而一直增加,于是變成一個(gè)死循環(huán), 為了避免此情況沃饶,一般地糊肤,可以寫為下面形式:
var divs = document.getElementsByTagName("div");
for(var i = 0,len = divs.length; i < len; i++){
    document.body.appendChild(document.createElement("div"));
}

總結(jié)
  • 一般地抖拦,要盡量減少訪問NodeList噩茄、HTMLCollection绩聘、NamedNodeMap的次數(shù)机杜。因?yàn)槊看卧L問它們,都會(huì)運(yùn)行一次基于文檔的查詢。所以,可以考慮將它們的值緩存起來(lái);
  • NodeList是節(jié)點(diǎn)的集合,HTMLCollection是元素節(jié)點(diǎn)的集合,NamedNodeMap是特性節(jié)點(diǎn)的集合诗宣,它們都是類數(shù)組對(duì)象来破;
  • 還有一個(gè)更經(jīng)典的類數(shù)組對(duì)象——函數(shù)內(nèi)部的arguments诅诱,它也具有動(dòng)態(tài)性干旁;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末祭阀,一起剝皮案震驚了整個(gè)濱河市遏餐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌失都,老刑警劉巖柏蘑,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異粹庞,居然都是意外死亡咳焚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門庞溜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)革半,“玉大人,你說我怎么就攤上這事流码∮止伲” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵漫试,是天一觀的道長(zhǎng)六敬。 經(jīng)常有香客問我,道長(zhǎng)驾荣,這世上最難降的妖魔是什么外构? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮秘车,結(jié)果婚禮上典勇,老公的妹妹穿的比我還像新娘。我一直安慰自己叮趴,他們只是感情好割笙,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般伤溉。 火紅的嫁衣襯著肌膚如雪般码。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天乱顾,我揣著相機(jī)與錄音板祝,去河邊找鬼。 笑死走净,一個(gè)胖子當(dāng)著我的面吹牛券时,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伏伯,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼橘洞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了说搅?” 一聲冷哼從身側(cè)響起炸枣,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弄唧,沒想到半個(gè)月后适肠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡候引,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年侯养,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片背伴。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沸毁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出傻寂,到底是詐尸還是另有隱情,我是刑警寧澤携兵,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布疾掰,位于F島的核電站,受9級(jí)特大地震影響徐紧,放射性物質(zhì)發(fā)生泄漏静檬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一并级、第九天 我趴在偏房一處隱蔽的房頂上張望拂檩。 院中可真熱鬧,春花似錦嘲碧、人聲如沸稻励。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)望抽。三九已至加矛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間煤篙,已是汗流浹背斟览。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辑奈,地道東北人苛茂。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鸠窗,于是被迫代替她去往敵國(guó)和親妓羊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • ??DOM(文檔對(duì)象模型)是針對(duì) HTML 和 XML 文檔的一個(gè) API(應(yīng)用程序編程接口)。 ??DOM 描繪...
    霜天曉閱讀 3,615評(píng)論 0 7
  • 基本概念 DOM DOM 是 JavaScript 操作網(wǎng)頁(yè)的接口丙猬,全稱為“文檔對(duì)象模型”(Document Ob...
    許先生__閱讀 857評(píng)論 0 1
  • 第3章 基本概念 3.1 語(yǔ)法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡(jiǎn)單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,099評(píng)論 0 21
  • 本章內(nèi)容 理解包含不同層次節(jié)點(diǎn)的 DOM 使用不同的節(jié)點(diǎn)類型 克服瀏覽器兼容性問題及各種陷阱 DOM 是針對(duì) HT...
    悶油瓶小張閱讀 625評(píng)論 0 1
  • 1. 基本條件 大家想一下:自己微信好友有多少人涨颜?你的微博加V了嗎?這是做新媒體的基本條件茧球。 如果你微信好友只有幾...
    雪佛蘭我最愛閱讀 1,274評(píng)論 0 0