我今天在 IE8 的 DOM 选择元素的 JavaScript 'options' 属性的实现中发现了一些奇怪的行为。
给定以下 HTML:
<select id="sel"><option value="val">An option</option></select>
和javascript:
var sel = document.getElementById('sel');
alert(sel === sel.options); //alerts 'true' in IE8
显然,在 IE8 上编写 select 实现的聪明人已经在 select 元素上编写了一个索引器,然后让它作为自己的“选项”属性暴露给 JavaScript。
我的问题是:根据 JavaScript 语言规范,这是预期的功能吗?这是一个已知的错误?我是否应该继续将“选项”属性视为对象,而不是专门的数组?
这不是在 Firefox 3.5、Chrome 1.0 或 Safari 3.1 下 select DOM 元素的行为方式,其中 'options' 属性作为 JavaScript 数组公开......
作为参考,当我将 'options' 属性传递给 jQuery 构造函数以包装其元素时,我遇到了这个问题。与带有 X 元素的 jQuery 对象的预期结果不同(使用 Firefox、Chrome 和 Safari),我返回了一个带有 1 个元素(选择元素本身)的 jQuery 对象。