getAttributemengambil atribut dari elemen DOM, sementara el.idmengambil properti dari elemen DOM ini. Mereka tidaklah sama.
Seringkali, properti DOM disinkronkan dengan atribut.
Namun, sinkronisasi tidak menjamin nilai yang sama . Contoh klasik adalah antara el.hrefdan el.getAttribute('href')untuk elemen jangkar.
Sebagai contoh:
<a href="/" id="hey"></a>
<script>
var a = document.getElementById('hey')
a.getAttribute('href') // "/"
a.href // Full URL except for IE that keeps '/'
</script>
Perilaku ini terjadi karena menurut W3C , properti href harus berupa tautan yang dibentuk dengan baik. Kebanyakan browser menghormati standar ini (coba tebak siapa yang tidak?).
Ada kasus lain untuk input's checkedproperti. Properti DOM mengembalikan trueatau falsesaat atribut mengembalikan string "checked"atau string kosong.
Lalu, ada beberapa properti yang hanya disinkronkan satu arah . Contoh terbaik adalah valueproperti sebuah inputelemen. Mengubah nilainya melalui properti DOM tidak akan mengubah atribut (edit: periksa komentar pertama untuk lebih presisi).
Karena alasan ini, saya sarankan Anda tetap menggunakan properti DOM , dan bukan atributnya, karena perilakunya berbeda di antara browser.
Pada kenyataannya, hanya ada dua kasus di mana Anda perlu menggunakan atribut:
- Atribut HTML khusus, karena tidak disinkronkan ke properti DOM.
- Untuk mengakses built-in HTML atribut, yang tidak disinkronkan dari properti, dan Anda yakin Anda membutuhkan atribut (misalnya, asli
valuedari sebuah inputelemen).
Jika Anda menginginkan penjelasan yang lebih detail, saya sangat menyarankan Anda membaca halaman ini . Ini hanya akan memakan waktu beberapa menit, tetapi Anda akan senang dengan informasi (yang saya simpulkan di sini).