【问题标题】:javascript options.length = 0 not working in IE9javascript options.length = 0 在 IE9 中不起作用
【发布时间】:2011-08-22 19:27:42
【问题描述】:

我有一个页面在添加新选项之前将选择列表的长度设置为 0。在 IE9 之前,这在所有浏览器中都可以正常工作。在 IE9 中,我收到错误:DOM 异常:NOT_FOUND_ERR (8)。这就是我想要做的所有事情:

var typebox = document.sForm.ePosition;
typebox.options.length = 0;

在兼容模式下工作正常。

【问题讨论】:

  • 所以基本上你想在添加项目之前删除选择框的所有元素?如果是这样,那不是最好的方法。
  • 好的。给我一些指点。还有什么方法可以解决?
  • 见@Seth 的回答;您应该通过代码删除元素。

标签: javascript internet-explorer-9


【解决方案1】:

尝试在控制台中执行每个部分,看看你的异常在哪里:

document.sForm
document.sForm.ePosition
document.sForm.ePosition.options
document.sForm.ePosition.options.length

我尝试将选项的长度设置为 0,但对它起作用(在 Chrome 中)感到非常惊讶。在我看来,Array.length 应该是只读属性。我会使用 DOM 代码来删除元素,如下所示:

while (element.hasChildNodes()) {
    element.removeChild(element.firstChild);
}

【讨论】:

  • options 不是实际的Array,但撇开这个不谈,数组上的可写length 属性有什么问题?它似乎为我提供了一种直观而简单的方式来清除数组。
  • @Tim:将数组的长度从 10 设置为 5 显然会使数组更短,但对我来说,不是以明显的方式。例如,很明显您正在截断数组,但您是从前面还是从后面截断?也许是添加的最后 5 个项目?我认为使用poppush 等数组修改器方法更清楚。此外,长度仅对其他对象(如函数)只读。它只是感觉不应该是可写的。 (我没有意识到这不是真正的Array)。
  • 很公平。搞JS数组很久了,不知道还能不能客观判断。
【解决方案2】:

我刚刚对同样的问题感到震惊,并为我们这些使用 jQuery 的人找到了一个方便的解决方案:

$(selectObject).empty();

我已经使用 jQuery 1.4.4 在 IE 7-9、FF 10.0 和 Chrome 18 中对此进行了测试。

【讨论】:

    【解决方案3】:

    问题是纯javascript,请先提供纯javascript回复。由于许多嵌入式解决方案无法使用 jquery,因此用户对 jquery 不感兴趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2012-03-05
      • 2018-04-29
      相关资源
      最近更新 更多