Свойства и атрибуты разные вещи.Атрибутами являются строки, которые вы видите в коде документа, доступные для любого типа документа с помощью DOM Core метода getAttribute
:
<a id="foo" href="bar" tabindex="1" onclick="alert()" class="bof" potato="lemon">
a.getAttribute('id') // string "foo"
a.getAttribute('href') // string "bar"
a.getAttribute('tabindex') // string "1"
a.getAttribute('onclick') // string "alert()"
a.getAttribute('class') // string "bof"
a.getAttribute('potato') // string "lemon"
, тогда как свойства доступны непосредственно для объекта, являются специализированными и специфичными для типа документа (например, определены в DOM HTML или HTML5 ) и, как правило, являются более удобочитаемыми вспомогательными средствами.Хотя они часто отражают то же самое, что и атрибут, они могут различаться по имени, значению, типу или назначению.
a.id // string "foo"
a.href // string "http://www.example.com/base/bar"
a.tabIndex // integer 1
a.onclick // function() { alert(); }
a.className // string "bof"
a.potato // undefined
Таким образом, в то время как id
приводит к одному и тому же значению, href
и всемдругие свойства URL становятся абсолютными по отношению к документу;tabIndex
и другие числовые свойства возвращают число вместо литеральной строки;onclick
и другие свойства обработчика событий возвращают объект функции JS, а свойства, чье имя конфликтует с общими зарезервированными словами, такими как class
(не только зарезервированные слова JavaScript, поскольку DOM является стандартом межязыкового языка), переименовываются (см.также: htmlFor
), а нестандартные атрибуты вообще недоступны в качестве свойств.Другие ошибки: value
/ selected
/ checked
на входах отражают current содержимое поля формы;атрибуты с одинаковыми именами являются начальными значениями defaultValue
/ defaultSelected
/ defaultChecked
.
[Кроме того, IE <8 имеет реальную проблему при разнице между атрибутами и свойствами и возвращает неправильное значениевещь за <code>getAttribute во всех случаях, когда они отличаются.Не позволяйте этому сбить вас с толку, и по этой причине избегайте использования getAttribute
для доступа к свойствам HTML DOM.]