getAttribute
отримує атрибут елемента DOM, тоді як el.id
отримує властивість цього елемента DOM. Вони не однакові.
Найчастіше властивості DOM синхронізуються з атрибутами.
Однак синхронізація не гарантує однакового значення . Класичний приклад - між анкерним елементом el.href
і el.getAttribute('href')
для нього.
Наприклад:
<a href="/" id="hey"></a>
<script>
var a = document.getElementById('hey')
a.getAttribute('href') // "/"
a.href // Full URL except for IE that keeps '/'
</script>
Така поведінка трапляється тому, що відповідно до W3C властивість href має бути добре сформованою ланкою. Більшість браузерів поважають цей стандарт (вгадайте, хто не?).
Існує ще один випадок для input
«S checked
власності. Властивість DOM повертає true
або, false
поки атрибут повертає рядок "checked"
або порожній рядок.
І тоді, є деякі властивості, які синхронізуються лише в один бік . Найкращий приклад - value
властивість input
елемента. Зміна його значення за допомогою властивості DOM не призведе до зміни атрибута (редагувати: перевірити перший коментар для більшої точності).
Через ці причини я пропоную продовжувати використовувати властивості DOM , а не атрибути, оскільки їх поведінка відрізняється між браузерами.
Насправді є лише два випадки, коли вам потрібно використовувати атрибути:
- Спеціальний атрибут HTML, оскільки він не синхронізується із властивістю DOM.
- Щоб отримати доступ до вбудованого в HTML атрибута, яка не синхронізований від власності, і ви впевнені , що вам потрібен атрибут (наприклад, оригінал
value
як input
елемента).
Якщо ви хочете отримати більш детальне пояснення, настійно рекомендую прочитати цю сторінку . Це займе у вас лише кілька хвилин, але ви будете в захваті від інформації (яку я тут підсумував).