通过property或setAttribute设置属性

时间:2011-11-05 07:30:41

标签: javascript dom

其中一个比另一个更优选吗?为什么?性能如何 - 如果这些被召唤数千次?

A) element.setAttribute("disabled", true);
B) element.disabled = true;

它们似乎都禁用了FF 4中的输入[text]元素。

4 个答案:

答案 0 :(得分:4)

一般......

使用属性。很长一段时间(直到版本7或8 IIRC)Internet Explorer的setAttribute实施严重破坏,将属性设置为属性(经典的失败点是class,因为没有{ {1}}属性(class)。

特别是在这种情况下...... className是错误的。它应该是element.setAttribute("disabled", true);

答案 1 :(得分:2)

element.setAttribute("disabled", some_bool)不会像您认为的那样有效。特别是,标准方面,disabled就是所谓的boolean attribute;它的存在,无论其价值如何,都是如此。 disabled=""disabled="disabled"disabled="true"甚至disabled="false"(!!!)在大多数浏览器中都表示相同的含义。 (虽然最后两个实际上是无效的HTML,但是出于真实目的,大多数浏览器会认为它们等同于disabled="disabled"。包括Big Four中的每一个。)通过设置值 - 任何值将布尔属性设置为true ,即使它是假的 - 你通过完全删除属性将它设置为假。

如果您关心属性的实际字符串值(在这种情况下您不应该这样做),特别是如果该属性尚未通过DOM公开(也就是说,它没有相应的属性) ),然后使用(get/set)Attribute。在大多数情况下(特别是如果你关心它如何影响元素,就像在你尝试禁用元素的情况下那样),使用DOM属性。

答案 2 :(得分:0)

IE需要使用setAttribute设置一些属性,但不是全部。我没有列表,你只需检查它是否有效。此外,使用setAttribute会将属性放在DOM中,因此可以在执行查看源时显示该属性。

答案 3 :(得分:0)

只有一个提示:element.setAttribute('class',xxx)在某些版本的IE中不起作用。

首选element.className = xxx