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елемента).
Якщо ви хочете отримати більш детальне пояснення, настійно рекомендую прочитати цю сторінку . Це займе у вас лише кілька хвилин, але ви будете в захваті від інформації (яку я тут підсумував).