There are some attributes in HTML which are "boolean" - browsers treat them as "true" if they are present, regardless of the value. An example of such an attribute is selected on the
<option> tag. Another is checked on
If you have a call to
setAttribute() for such an attribute, there seems to be no value you can set to have the browsers consistently behave as though the attribute is missing.
will still mark the option selected. null, empty string or undefined don't work either. If anyone knows of a value I can set to achieve my goal, please let me know, but I don't think one exists. (Because of some framework code I use, not calling
setAttribute(), or calling
removeAttribute() is difficult.)
I'm trying to find an exhaustive list of such attributes to special case them. Here's what I have so far:
disabled, readonly of
Please help me complete this list - or point me to an existing one.
(Because of some framework code I use, not calling setAttribute(), or calling removeAttribute() is difficult.)
Then I would submit that the framework code needs fixing, or dumping.
You can't setAttribute to unset an attribute, by design. Any solution you found involving out-of-band values like ‘null’, if it happened to work in any particular browser, would be quite invalid according to the DOM Core standard.
The full list of boolean attributes in HTML 4.01 (and hence XHTML 1.0) is (with property names where they differ in case):
checked (input type=checkbox/radio)
disabled (input, textarea, button, select, option, optgroup)
readonly (input type=text/password, textarea)
ismap isMap (img, input type=image)
declare (object; never used)
noresize noResize (frame)
nowrap noWrap (td, th; deprecated)
noshade noShade (hr; deprecated)
compact (ul, ol, dl, menu, dir; deprecated)
EDIT: After reading your comment, read this about setAttribute. Notably:
Even though getAttribute() returns null for missing attributes, you should use removeAttribute() instead of elt.setAttribute(attr, null) to remove the attribute.
on table cells e.g. TD, TH
for the record, to change attributes like checked (on checkbox/radio elements) you can do.
myCheckBoxElem.checked = true|false;
myCheckBoxElem.checked = !myCheckBoxElem.checked;//toggles to the opposite state
Can't you just use
Not exactly what you're asking about, but both the 'class' and 'for' attributes receive different DOM names