Логические атрибуты HTML

В HTML есть некоторые атрибуты, которые являются "логическими" - браузеры рассматривают их как "истинные", если они присутствуют независимо от значения. Пример такого атрибута выбран в теге <option>. Другой отмечен на <input type="checkbox">.

Если у вас есть вызов setAttribute() для такого атрибута, кажется, нет никакого значения, которое вы можете установить для того, чтобы браузеры постоянно вели себя так, как будто этот атрибут отсутствует.

Например

option.setAttribute("selected", false)

по-прежнему будет отмечать выбранную опцию. null, пустая строка или undefined тоже не работают. Если кто-нибудь знает о ценности, которую я могу установить для достижения своей цели, пожалуйста, дайте мне знать, но я не думаю, что она существует. (Из-за некоторого кода рамки, который я использую, не вызов setAttribute(), или вызов removeAttribute() затруднен.)

Я пытаюсь найти исчерпывающий список таких атрибутов для их конкретного случая. Вот что я до сих пор:

  • выбран <option>
  • отмечен <input>
  • отключен, readonly из <input>, <select>, <option>, <optgroup>, <button>, <textarea>
  • несколько <select>

Пожалуйста, помогите мне заполнить этот список - или указать мне на существующий.

Ответы

Ответ 1

(Из-за какого-то кода рамки, который я использую, не вызывающего setAttribute() или вызова removeAttribute() сложно.)

Затем я хотел бы представить, что код фреймворка нуждается в фиксации или демпинге.

Вы не можете setAttribute отключить атрибут по дизайну. Любое решение, которое вы нашли с использованием внеполосных значений, таких как "null", если оно получилось работать в любом конкретном браузере, было бы совершенно недействительным в соответствии со стандартом DOM Core.

setAttribute() в любом случае лучше избегать в контексте HTML (не XML) HTML. 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)
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)

Ответ 2

Попробуйте removeAttribute:

option.removeAttribute("selected");

EDIT: прочитав свой комментарий, прочитайте this о setAttribute. В частности:

Даже если getAttribute() возвращает значение null для отсутствующих атрибутов, вы должны использовать removeAttribute() вместо elt.setAttribute(attr, null), чтобы удалить атрибут.

Ответ 3

на ячейках таблицы, например. TD, TH

nowrap

для записи, чтобы изменить атрибуты, например check (on checkbox/radio elements), которые вы можете сделать.

myCheckBoxElem.checked = true|false;

или

myCheckBoxElem.checked = !myCheckBoxElem.checked;//toggles to the opposite state

Ответ 4

Не можете ли вы просто использовать removeAttribute()?

Ответ 5

Не совсем то, о чем вы просите, но оба атрибута "class" и "для" получают разные имена DOM

element.className
element.htmlFor