【问题标题】:Array.some() is not a FunctionArray.some() 不是函数
【发布时间】:2020-07-07 09:47:29
【问题描述】:

我对 JavaScript 中的 array.some() 方法有疑问。 我有一个 html 代码:

<div class="list">
 <div class="item"></div>
 <div class="item"></div>
 <div class="item selected"></div>
</div>

我正在尝试查找包含类名“selected”的数组元素。

const items = document.querySelectorAll('.item');

items.some(item => {
 if (item.classList.contains('selected')) { console.log(true); }
 else { console.log(false); }
});

但我得到的只是这个错误:“Uncaught TypeError: items.some is not a function” 有人可以告诉我,为什么 Array.some() 方法不适用于 div 数组?谢谢

【问题讨论】:

  • #remark,我知道,我打错了,“包含”而不是“包含”,但这不是重点

标签: javascript arrays class methods typeerror


【解决方案1】:

发生这种情况是因为.some() 是一个数组方法,但这里的items 不是一个数组,而是一个节点集合,更广为人知的是NodeList。所以,我们首先需要它把它转换成一个数组,比如:

const items = [...document.querySelectorAll('.item')];

更多信息:

演示:

const items = [...document.querySelectorAll('.item')];

items.some(item => {
  if (item.classList.contains('selected')) {
    console.log(true, item);
  } else {
    console.log(false, item);
  }
});
<div class="list">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item selected"></div>
</div>

【讨论】:

    【解决方案2】:

    document.querySelectorAll 返回 NodeList 女巫不要实现 some 方法

    使用Array.fromNodeList 转换为Array

    你可以找到其他methods to convert NodeList to Array

    const items = Array.from(document.querySelectorAll('.item'));
    
    items.some(item => {
     if (item.classList.contains('selected')) { console.log(true); }
     else { console.log(false); }
    });
    

    【讨论】:

      【解决方案3】:

      querySelectorAll 函数返回 NodeList,而不是数组。

      使用Array.from(nodelist)将其转换为数组。

      【讨论】:

        猜你喜欢
        • 2017-04-15
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        • 2020-02-08
        • 2017-03-18
        • 2022-07-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多