小心,querySelector前方10米有坑

在寫一個小組建的時候用到了document.querySelector,被小夥伴提醒說這個可能有坑,是啥呢?
先來一篇MDN的文檔解解饞:戳我戳我戳我>>>>>>>NodeList

翻譯一下主要部分:

  1. 對於現代瀏覽器來說,雖然NodeList不是Array,但是它是可枚舉的,因而它可以直接使用forEach等方法;
  2. 對於一些老版本的瀏覽器,可以使用Array.from或者Array.prototype.forEach來轉換NodeList爲數組,繼而使用forEach等方法;
  3. 在有些情況下,NodeList是live(實時變化的),但有些時候不是。

    ``
    比如,使用document.getElementById,獲取該元素的childNodes,那麼這個集合是live的。
    但是,用document.querySelectorAll()獲取到的集合卻不是live的。
    這個live具體指什麼呢?意思是,如果你事先獲取到一個集合,保存在一個變量A上。在對這個集合進行增刪改等操作,如果變量A能夠實時反應你的增刪改操作,說明集合是live的,反之則不是。
    ``

這個「坑」就在於,文檔也沒有能夠說明清楚,在用querySelector後,具體什麼時候NodeList是live,什麼時候NodeList不是live。

於是小夥們做起了實驗,大致發現,如果對節點進行刪除,那麼是live;如果新增節點則不是live。

朋友們也可以自己做做實驗。如果有新發現歡迎評論留言~

另一個值得注意的是:關於HTMLCollection和NodeList。
從MDN的文檔上籠統來說,所有集合都可以叫做NodeList,不過需要注意如下:image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章