javascript 为什么我不能对选择框的选项执行forEach?

laik7k3q  于 2023-01-01  发布在  Java
关注(0)|答案(3)|浏览(151)

下面是控制台的一些输出,说明了我的问题

var a=document.createElement("select"); <ENTER>
undefined

a.appendChild(document.createElement("option"));  <ENTER>
<option>​</option>​

a
<select>​…​</select>​

a.options
[<option>​</option>​]

a.options[0];
<option>​</option>​

目前为止一切顺利但现在
我输入a.options.,然后输入forEach,但我注意到forEach没有列出。

a.options.forEach(function() {});
VM1048:2 Uncaught TypeError: a.options.forEach is not a function
    at <anonymous>:2:11
    at Object.InjectedScript._evaluateOn (<anonymous>:905:140)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:838:34)
    at Object.InjectedScript.evaluate (<anonymous>:694:21)

但是a.选项看起来像一个数组
而且forEach绝对适用于数组,没有错误。

a=[1,2];
[1, 2]
typeof a
"object"
a.forEach(function(){});
undefined

我猜选择框的选项可能不是数组,那么它们是什么?
我听说过'arguments'伪数组..我猜也许选择框的'options'是这样的?/一些语法与数组相似的对象?

ve7v8dk2

ve7v8dk21#

因为options * 不是 * 数组;它是一个HTMLCollection。因此,它 * 不 * 具有forEach函数成员。
HTMLCollection接口表示元素(按文档顺序)的泛型集合(类似数组的对象),并提供用于从列表中进行选择的方法和属性。
可以将callArray.prototype.forEach一起使用,因为HTMLCollection类似于数组1:

Array.prototype.forEach.call(options, function ..)

1 HTMLAcovery接口有一个length属性,允许通过索引器进行位置访问。

tcomlyy6

tcomlyy62#

user2864740给出的答案非常棒。
我将给予一个示例,说明如何基于提供的解决方案访问选项,并在控制台中显示所有选项的文本内容:

var select = $('#selector_here');
Array.prototype.forEach.call(select.options, function(option, index) {
  console.log('option ' + (index + 1) + ':', option.textContent);
  /* do some required magic here */
});
pokxtpni

pokxtpni3#

您可以:

Object.values(document.getElementById("myElementID").options).forEach(element => console.log(element));

相关问题