在寫一個(gè)小組建的時(shí)候用到了document.querySelector淮捆,被小伙伴提醒說這個(gè)可能有坑郁油,是啥呢?
先來一篇MDN的文檔解解饞:戳我戳我戳我>>>>>>>NodeList
翻譯一下主要部分:
對(duì)于現(xiàn)代瀏覽器來說攀痊,雖然NodeList不是Array桐腌,但是它是可枚舉的,因而它可以直接使用forEach等方法苟径;
對(duì)于一些老版本的瀏覽器案站,可以使用Array.from或者Array.prototype.forEach來轉(zhuǎn)換NodeList為數(shù)組,繼而使用forEach等方法棘街;
-
在有些情況下蟆盐,NodeList是live(實(shí)時(shí)變化的)承边,但有些時(shí)候不是。
比如舱禽,使用document.getElementById炒刁,獲取該元素的childNodes,那么這個(gè)集合是live的誊稚。 但是翔始,用document.querySelectorAll()獲取到的集合卻不是live的。 這個(gè)live具體指什么呢里伯?意思是城瞎,如果你事先獲取到一個(gè)集合,保存在一個(gè)變量A上疾瓮。在對(duì)這個(gè)集合進(jìn)行增刪改等操作脖镀,如果變量A能夠?qū)崟r(shí)反應(yīng)你的增刪改操作,說明集合是live的狼电,反之則不是蜒灰。
這個(gè)「坑」就在于,文檔也沒有能夠說明清楚肩碟,在用querySelector后强窖,具體什么時(shí)候NodeList是live,什么時(shí)候NodeList不是live削祈。
于是小伙們做起了實(shí)驗(yàn)翅溺,大致發(fā)現(xiàn),如果對(duì)節(jié)點(diǎn)進(jìn)行刪除髓抑,那么是live咙崎;如果新增節(jié)點(diǎn)則不是live。
朋友們也可以自己做做實(shí)驗(yàn)吨拍。如果有新發(fā)現(xiàn)歡迎評(píng)論留言~
另一個(gè)值得注意的是:關(guān)于HTMLCollection和NodeList褪猛。