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
</script>
Такое поведение происходит потому, что согласно W3C свойство href должно быть правильно сформированной ссылкой. Большинство браузеров соблюдают этот стандарт (угадайте, кто нет?).
Существует еще один случай для input
«S checked
собственности. Свойство DOM возвращает true
или в false
то время как атрибут возвращает строку "checked"
или пустую строку.
Кроме того, есть некоторые свойства, которые синхронизируются только в одном направлении . Лучший пример - value
свойство input
элемента. Изменение его значения с помощью свойства DOM не изменит атрибут (редактирование: проверьте первый комментарий для большей точности).
По этим причинам я бы посоветовал вам продолжать использовать свойства DOM , а не атрибуты, поскольку их поведение различается в разных браузерах.
На самом деле есть только два случая, когда вам нужно использовать атрибуты:
- Пользовательский атрибут HTML, поскольку он не синхронизируется со свойством DOM.
- Чтобы получить доступ к встроенному в HTML атрибута, который не синхронизирован от собственности, и вы уверены , что вам нужен атрибут (например, оригинал
value
в качестве input
элемента).
Если вам нужно более подробное объяснение, я настоятельно рекомендую вам прочитать эту страницу . Это займет у вас всего несколько минут, но вы будете в восторге от информации (которую я здесь резюмировал).