Установка свойства через свойство или setAttribute - PullRequest
9 голосов
/ 05 ноября 2011

Один из них более предпочтителен, чем другой? Зачем? Как насчет производительности - если они вызываются тысячи раз?

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

Кажется, что они оба отключают элемент input [text] в FF 4.

Ответы [ 4 ]

4 голосов
/ 05 ноября 2011

В общем…

Используйте свойства.В течение долгого времени (до версии 7 или 8 IIRC) Internet Explorer имел серьезно нарушенную реализацию setAttribute, которая устанавливала бы свойство, а не атрибут (классическая точка отказа была class, поскольку свойства class не существует (это className).

В данном случае, в частности ... element.setAttribute("disabled", true); неправильно. Это должно быть element.setAttribute("disabled", "disabled");

2 голосов
/ 05 ноября 2011

element.setAttribute("disabled", some_bool) не работает так, как вы думаете.В частности, по стандарту disabled это то, что известно как логический атрибут ;само его присутствие, независимо от его ценности, делает это правдой.disabled="", disabled="disabled", disabled="true" и даже disabled="false" (!!!) означают одно и то же в большинстве браузеров.(Хотя последние два на самом деле являются недопустимым HTML, большинство браузеров будут считать их эквивалентными disabled="disabled" в истинных целях. Включая каждый из Большой четверки.) Вы устанавливаете логический атрибут в значение true, устанавливая значение - любое значение, дажеесли это ложно - и вы устанавливаете его в ложь, полностью удаляя атрибут.

Если вам небезразлично фактическое строковое значение атрибута (что в этом случае не следует), и особенно если атрибутне выставляется через DOM (то есть не имеет соответствующего свойства), затем используйте (get/set)Attribute.В большинстве случаев (особенно если вы заботитесь о том, как это влияет на элемент, например, в этом случае, когда вы пытаетесь отключить элемент), используйте свойство DOM.

0 голосов
/ 05 ноября 2011

Только один совет: element.setAttribute ('class', xxx) не работает в некоторых версиях IE.

Предпочитают element.className = xxx вместо

0 голосов
/ 05 ноября 2011

IE нужно установить некоторые атрибуты с setAttribute, но не все. У меня нет списка, нужно просто проверить, работает он или нет. Кроме того, использование setAttribute поместит атрибут в DOM, поэтому его можно показать при выполнении просмотра источника .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...