getAttribute
mengambil atribut dari elemen DOM, sementara el.id
mengambil 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.href
dan 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 checked
properti. Properti DOM mengembalikan true
atau false
saat atribut mengembalikan string "checked"
atau string kosong.
Lalu, ada beberapa properti yang hanya disinkronkan satu arah . Contoh terbaik adalah value
properti sebuah input
elemen. 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
value
dari sebuah input
elemen).
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).