鍍金池/ 問(wèn)答/HTML/ 關(guān)于querySelectorAll()什么時(shí)候取到的不是DOMlist?

關(guān)于querySelectorAll()什么時(shí)候取到的不是DOMlist?

我看到某插件里有寫(xiě):判斷是否是DOMlist和封裝document.querySelectorAll的函數(shù),如下

// 是否是 DOM List
function isDOMList(selector) {
    if (!selector) {
        return false;
    }
    if (selector instanceof HTMLCollection || selector instanceof NodeList) {
        return true;
    }
    return false;
}

// 封裝 document.querySelectorAll
function querySelectorAll(selector) {
    var result = document.querySelectorAll(selector);
    if (isDOMList(result)) {
        return result;
    } else {
        return [result];
    }
}

然后我就奇怪,為什么會(huì)要重新封裝一次querySelectorAll(),然后我寫(xiě)了一個(gè)Demo發(fā)現(xiàn)不論是怎樣,querySelectorAll()取到的永遠(yuǎn)都是DOMlist,想問(wèn)一下這個(gè)封裝判斷是否是DOMlist的作用是什么,或者說(shuō)什么情況下,我的demo中會(huì)返回false

下面給出我寫(xiě)的demo

<body>
<ul>
  <li class="nobe">a</li>
  <li>b</li>
  <li>c</li>
  <li>d</li>
  <li class="nobe">e</li>
</ul>
<button onclick="checkDom()">點(diǎn)擊尋找li</button>
<script type="text/javascript">
  function isDOMList(selector) {
    if (!selector) {
      return false;
    }
    if (selector instanceof HTMLCollection || selector instanceof NodeList) {
      return true;
    }
    return false;
  }

  function qSA(selector) {
    var result = document.querySelectorAll(selector);
    if (isDOMList(result)) {
      console.log('是DOMlist');
      return result;
    } else {
      console.log('不是DOMlist');
      return [result];
    }
  }

  function checkDom() {
    console.log(qSA('.nobe'));
  }
</script>
</body>
回答
編輯回答
蝶戀花

dom-core.js#L25

樓主只發(fā)這段代碼。。。當(dāng)然是沒(méi)用的。。。

  1. 首先這個(gè)插件為什么要封裝querySelectorAll,是把APIselectors封裝成selector。
  2. 其次為什么要isDOMList,因?yàn)槿思业牟寮?code>find方法暴露了querySelectorAll,并且人家的selector類(lèi)型也可以說(shuō)Nodelist,是能嵌套的。
  3. 然后isDOMList為什么要這樣寫(xiě),因?yàn)槿思疫@個(gè)方法又不是只在這里用。

所以你單獨(dú)把這一段代碼提出來(lái)說(shuō)有啥用,那當(dāng)然沒(méi)啥用。。。。

2018年5月28日 00:04
編輯回答
玄鳥(niǎo)

哪個(gè)插件,發(fā)來(lái)看看?

MDN上的querySelectorAll都明確寫(xiě)了返回Nodelist..

2017年3月18日 21:51