【问题标题】:document.getElementById('').length = 0 doesn't work under Win7document.getElementById('').length = 0 在 Win7 下不起作用
【发布时间】:2010-05-18 16:14:13
【问题描述】:

我有一个选择列表:

<select id="sel">
     <option>text1</option>
     <option>text2</option>
     <option>text3</option>
     <option>text4</option>
</select>

我想删除所有项目,没有for 循环。 我试过了:

document.getElementById('sel').length = 0;

但这在某些浏览器中不起作用。
有什么想法吗?

谢谢

【问题讨论】:

    标签: javascript select collections


    【解决方案1】:
    document.getElementById( 'sel' ).innerHTML = '';
    

    从评论中移出:

    您应该将这样的length 属性理解为更像一个只读属性,它为您提供有关对象状态的信息。就像你得到一个数组的长度一样。但是,更改该值不会影响实际对象,而正确删除元素将导致浏览器重新呈现该元素的 DOM(并因此更新该值)。我猜一些浏览器可能会解释将长度设置为零会清除该对象,但通常这不应该是预期的行为。另外我认为Element.length 实际上不是 DOM 规范的一部分。

    要添加一些引用,核心DOM Element 没有任何长度参数。 HTMLSelectElementHTMLOptionsCollection(可以通过 HTMLSelectElement.options 访问)都有一个长度属性,但是设置它应该引发 DOMException

    因此,根据标准,两种方式设置长度都是非法的,因此如果您想支持大多数浏览器,则不应使用。

    【讨论】:

    • 谢谢,它有效:) 你能解释一下为什么有些浏览器不“理解”长度方法吗?
    • @Syom:您试图设置select 元素的长度;您需要设置其 options 数组的长度(请参阅我的答案作为示例,但 innerHTML 版本也可以正常工作)。
    • 0 分配给length 确实会改变数组。 length 也是 HTMLCollection 的 DOM 1 规范的一部分:w3.org/TR/2000/WD-DOM-Level-1-20000929/… 你是对的,它被标记为只读。
    • 我将评论移至答案并添加了一些参考。
    • 在 DOM 元素上设置length 属性确实没有意义,因为它没有。在 array 上设置length 属性绝对是更改其长度的有效且正确的方法;请参阅规范的第 15.4 节 (ecma-international.org/publications/standards/Ecma-262.htm): *"...每当 length 属性更改时,名称为数组索引且值不小于新长度的每个属性都会自动删除.."
    【解决方案2】:

    以下任一工作:

    document.getElementById('sel').options.length = 0;
    

    document.getElementById('sel').innerHTML = "";
    

    【讨论】:

    • @T.J. Crowder document.getElementById('sel').options.length = 0;我测试过,不行
    • @Syom:一直对我有用,在我尝试过的任何浏览器中:jsbin.com/okaqe你在用什么?
    • @Syom:适用于我,Chrome 2、3 和 4(没有 1.0),所有 Windows Server 2003。你使用什么操作系统?
    • @Crescent Fresh Windows 七。 Google Chrome 4.1.249.1064 对操作系统有什么影响?
    • 在 Chrome 4.1.249 中对我来说很好用。 options.length= 0 是清空选择的标准规范方法,可以追溯到远古的 Netscape 2,因此如果某些浏览器破坏了它,那将是一个惊喜。
    猜你喜欢
    • 2021-08-29
    • 2014-02-06
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多