Любая разница между element.setAttribute element ['attr'] element.attr - PullRequest
4 голосов
/ 17 октября 2010

Я заметил, что у javascript есть несколько способов установить и получить атрибут с элементом.

Я не уверен, есть ли разница между ними. особенно, есть ли кросс-браузерные проблемы.

Ответы [ 2 ]

4 голосов
/ 17 октября 2010

Свойства и атрибуты элементов DOM весьма различны, и это различие является источником некоторой путаницы.

Одна проблема состоит в том, что не каждый атрибут отображается на свойство с тем же именем.Например, атрибут value элемента <input> отображается на свойство defaultValue, а свойство value не отображается ни на один атрибут (кроме старого IE: см. Ниже).

Другая основная причина, по которой вам следует использовать свойства, состоит в том, что более старые версии IE (<= 7 и режимы совместимости в более поздних версиях) неправильно реализуют <code>getAttribute() и setAttribute().Большинство атрибутов отображаются непосредственно в свойства с одинаковыми именами в IE, что имеет ряд нежелательных последствий, например, означает, что установка атрибута обработчика событий не работает правильно в IE.На следующей странице есть полезная информация: http://reference.sitepoint.com/javascript/Element/setAttribute

Существуют и другие различия.Например, атрибуты / свойства, относящиеся к URL-адресам, имеют некоторые расхождения в способах обработки относительных URL-адресов.

Чтобы увидеть разницу между атрибутами и свойствами в браузерах, соответствующих стандартам, рассмотрите значение текстового поля:

<input type="text" id="textbox" value="foo">

var textBox = document.getElementById("textbox");

console.log(textBox.getAttribute("value")); // "foo"
console.log(textBox.value); // "foo"
console.log(textBox.defaultValue); // "foo"

Теперь, если пользователь вводит текстовое поле или значение текстового поля изменяется с помощью скрипта, мы видим, что значения свойств и атрибутов расходятся:

textBox.value = "bar";
console.log(textBox.getAttribute("value")); // "foo"
console.log(textBox.value); // "bar"
console.log(textBox.defaultValue); // "foo"

Установка значения атрибута приведет ктеперь не влияют на текущее значение:

textBox.setAttribute("value", "baz");
console.log(textBox.getAttribute("value")); // "baz"
console.log(textBox.value); // "bar"
console.log(textBox.defaultValue); // "baz"
2 голосов
/ 17 октября 2010

Javascript гарантирует, что element["attr"] и element.attr будут одинаковыми.

setAttribute(), однако, является не частью самого языка, а над уровнем DOM над ним. Нет гарантии, что это то же самое, что запись в атрибут attr. Он может делать больше или даже меньше (то есть даже не обновлять атрибут attr объекта и требовать, чтобы вы вызывали getAttribute(), чтобы получить значение обратно).

На практике три пути, как правило, эквивалентны. Остерегайтесь таких вещей, как this .

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