为什么将选择元素转换为数组会返回一个子元素数组?

3
当我在从页面中选择一些元素时,不小心使用了querySelector而不是querySelectorAll,我发现了一些有趣的事情。通常,在查询后,我会直接将静态节点列表转换为数组。但是,由于querySelector只返回它找到的第一个匹配节点,而不是一个NodeList,因此我的脚本尝试将select节点转换为数组。它并没有返回一个空数组,而是返回了select元素的子元素。 为什么将select元素转换为数组会返回子节点? 这对其他元素(如div)无效:

var selectParent = document.querySelector('.selectParent');
var selectArray = Array.from(selectParent);
console.log(selectArray);

var divParent = document.querySelector('.divParent');
var divArray = Array.from(divParent);
console.log(divArray);
<select class="selectParent">
  <option>Option 1</option>
  <option>Option 2</option>
</select>

<div class="divParent">
  <div>Div 1</div>
  <div>Div 2</div>
</div>

1个回答

3
这主要是出于历史兼容性的考虑。HTMLSelectElement有两个关键特点,使其成为类似数组的对象:
  • length属性
  • 索引式访问
这两个特性与

有什么建议可以将它转换为一个数组,其中第一个且唯一的元素是选择项? - Whip
@Whip - 很抱歉,我不理解这个问题。 - T.J. Crowder
没事了,我已经想通了 [].push(selectParent) - Whip
1
@Whip - 或者更直接地说,[selectParent] - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接