17

HTML 中有一些属性是“布尔值”——如果它们存在,浏览器会将它们视为“真”,而不管值如何。在标签上选择了此类属性的一个示例。<option>另一个被选中<input type="checkbox">

如果您调用setAttribute()了此类属性,则似乎没有可以设置的值以使浏览器始终如一地表现该属性一样。

例如

option.setAttribute("selected", false)

仍将标记选择的选项。null、空字符串或undefined也不起作用。如果有人知道我可以设定一个值来实现我的目标,请告诉我,但我认为不存在。(因为我使用了一些框架代码,调用setAttribute(),或者调用removeAttribute()很困难。)

我正在尝试查找此类属性的详尽列表,以应对特殊情况。这是我到目前为止所拥有的:

  • 选择<option>
  • 检查_<input>
  • disabled , readonly of <input>, <select>, <option>, <optgroup>, <button>,<textarea>
  • 倍数_<select>

请帮助我完成此列表 - 或将我指向现有的列表。

4

5 回答 5

24

(由于我使用了一些框架代码,不调用 setAttribute() 或调用 removeAttribute() 很困难。)

然后我会提交框架代码需要修复或转储。

根据设计,您无法通过 setAttribute 取消设置属性。您发现的任何涉及带外值(如“null”)的解决方案,如果它碰巧在任何特定浏览器中工作,根据 DOM 核心标准,将是完全无效的。

在任何情况下,最好在浏览器(非 XML)HTML 上下文中避免 setAttribute()。IE pre-8 不知道 DOM 属性和 JavaScript 属性之间的区别,这很容易导致许多非常奇怪的问题。如果您尝试将“checked”设置为属性(理论上您应该将其设置为字符串“checked”),不要指望 IE 会配合。

HTML 4.01(以及因此的 XHTML 1.0)中的布尔属性的完整列表是(带有不同大小写的属性名称):

checked             (input type=checkbox/radio)
selected            (option)
disabled            (input, textarea, button, select, option, optgroup)
readonly            (input type=text/password, textarea)
multiple            (select,input)
ismap     isMap     (img, input type=image)

defer               (script)
declare             (object; never used)
noresize  noResize  (frame)
nowrap    noWrap    (td, th; deprecated)
noshade   noShade   (hr; deprecated)
compact             (ul, ol, dl, menu, dir; deprecated)
于 2009-04-01T23:13:57.127 回答
3

尝试removeAttribute

option.removeAttribute("selected");

编辑:阅读您的评论后,请阅读有关setAttribute 的内容。尤其:

即使 getAttribute() 为缺少的属性返回 null,您也应该使用 removeAttribute() 而不是 elt.setAttribute(attr, null) 来删除该属性。

于 2009-04-01T16:42:54.743 回答
2

在表格单元格上,例如 TD、TH

nowrap

作为记录,您可以更改选中的属性(在复选框/单选元素上)。

myCheckBoxElem.checked = true|false;

或者

myCheckBoxElem.checked = !myCheckBoxElem.checked;//toggles to the opposite state
于 2009-04-01T16:40:05.467 回答
1

你不能用removeAttribute()吗?

于 2009-04-01T16:41:33.063 回答
1

不完全是您要问的,但“类”和“for”属性都接收不同的 DOM 名称

element.className
element.htmlFor
于 2009-04-01T16:54:07.667 回答