Setelah perubahan yang dibuat pada jQuery 1.6.1, saya telah mencoba untuk mendefinisikan perbedaan antara properti dan atribut dalam HTML.
Melihat daftar pada catatan rilis jQuery 1.6.1 (di dekat bagian bawah), tampaknya orang dapat mengklasifikasikan properti dan atribut HTML sebagai berikut:
Properti: Semua yang memiliki nilai boolean atau yang dihitung UA sepertiIndex yang dipilih.
Atribut: 'Atribut' yang dapat ditambahkan ke elemen HTML yang bukan boolean atau mengandung nilai yang dihasilkan UA.
Pikiran?
javascript
html
dom
properties
schalkneethling
sumber
sumber
Jawaban:
Saat menulis kode sumber HTML, Anda dapat menentukan atribut pada elemen HTML Anda. Kemudian, setelah browser mem-parsing kode Anda, simpul DOM yang sesuai akan dibuat. Node ini adalah objek, dan karenanya memiliki properti .
Misalnya, elemen HTML ini:
memiliki 2 atribut (
type
danvalue
).Setelah browser mem-parsing kode ini, objek HTMLInputElement akan dibuat, dan objek ini akan berisi puluhan properti seperti: terima, accessKey, luruskan, alt, atribut, autofocus, baseURI, dicentang, childElementCount, childNodes, anak-anak, classList, className, clientTinggi, dll.
Untuk objek DOM node tertentu, properti adalah properti dari objek itu, dan atribut adalah elemen dari
attributes
properti objek itu.Saat simpul DOM dibuat untuk elemen HTML tertentu, banyak propertinya terkait dengan atribut dengan nama yang sama atau mirip, tetapi itu bukan hubungan satu-ke-satu. Misalnya, untuk elemen HTML ini:
DOM node yang sesuai akan memiliki
id
,type
danvalue
properti (antara lain):The
id
properti adalah properti tercermin untukid
atribut: Mendapatkan properti membaca nilai atribut, dan pengaturan properti menulis nilai atribut.id
adalah properti murni yang tercermin, tidak mengubah atau membatasi nilai.The
type
properti adalah properti tercermin untuktype
atribut: Mendapatkan properti membaca nilai atribut, dan pengaturan properti menulis nilai atribut.type
bukan properti yang dipantulkan murni karena terbatas pada nilai yang diketahui (misalnya, jenis input yang valid). Jika Anda pernah<input type="foo">
, makatheInput.getAttribute("type")
beri Anda"foo"
tetapitheInput.type
memberi Anda"text"
.Sebaliknya,
value
properti tidak mencerminkanvalue
atribut. Sebaliknya, ini adalah nilai input saat ini. Ketika pengguna mengubah nilai kotak input secara manual,value
properti akan mencerminkan perubahan ini. Jadi jika pengguna memasukkan"John"
ke dalam kotak input, maka:sedangkan:
The
value
properti mencerminkan saat teks-konten di dalam kotak input, sedangkanvalue
atribut berisi awal teks-isivalue
atribut dari kode sumber HTML.Jadi, jika Anda ingin tahu apa yang ada di dalam kotak teks, baca properti. Namun, jika Anda ingin tahu apa nilai awal kotak teks itu, baca atributnya. Atau Anda dapat menggunakan
defaultValue
properti, yang merupakan refleksi murni darivalue
atribut:Ada beberapa sifat yang secara langsung mencerminkan atribut mereka (
rel
,id
), beberapa refleksi langsung dengan nama yang sedikit-yang berbeda (htmlFor
mencerminkanfor
atribut,className
mencerminkanclass
atribut), banyak yang mencerminkan atribut mereka tetapi dengan pembatasan / modifikasi (src
,href
,disabled
,multiple
), dan sebagainya di. Spesifikasinya mencakup berbagai jenis refleksi.sumber
for
->htmlFor
) dan juga daftar properti yang mengambil nilai awal dari atribut, namun tidak mencerminkannya (input.value
). Saya berharap ini akan berada di suatu tempat di sumber perpustakaan seperti github.com/Matt-Esch/virtual-dom tetapi tidak benar-benar didokumentasikan.Setelah membaca jawaban Sime Vidas , saya mencari lebih banyak dan menemukan penjelasan yang sangat mudah dan mudah dipahami dalam dokumen sudut .
sumber
colspan
atribut memilikicolSpan
properti. ... Jadi, atribut mana yang tidak memiliki properti terkait sekarang?Jawabannya sudah menjelaskan bagaimana atribut dan properti ditangani secara berbeda, tetapi saya benar-benar ingin menunjukkan betapa gilanya ini. Bahkan jika sampai batas tertentu spek.
Gila, memiliki beberapa atribut (misalnya id, kelas, foo, bar ) untuk mempertahankan hanya satu jenis nilai di DOM, sementara beberapa atribut (misalnya diperiksa, dipilih ) untuk mempertahankan dua nilai; yaitu, nilai "saat dimuat" dan nilai "keadaan dinamis". (Bukankah DOM seharusnya mewakili keadaan dokumen sepenuhnya?)
Sangat penting, bahwa dua bidang input , mis. Teks dan kotak centang berperilaku dengan cara yang sama . Jika bidang input teks tidak mempertahankan nilai "saat itu dimuat" dan nilai "saat ini, dinamis" yang terpisah, mengapa kotak centang? Jika kotak centang memang memiliki dua nilai untuk atribut yang diperiksa , mengapa tidak memiliki dua untuk atribut class dan id ? Jika Anda berharap untuk mengubah nilai bidang * input * teks , dan Anda mengharapkan DOM (yaitu "representasi serial") untuk berubah, dan mencerminkan perubahan ini, mengapa Anda tidak mengharapkan hal yang sama dari bidang input dari ketik kotak centang pada atribut yang diperiksa?
Perbedaan, dari "itu adalah atribut boolean" tidak masuk akal bagi saya, atau, setidaknya bukan alasan yang cukup untuk ini.
sumber
checked
atribut diwakili olehdefaultChecked
properti (juga untuk input teksvalue
atribut diwakili olehdefaultValue
properti). Properti kedua,,checked
diperlukan untuk menyatakan apakah kotak centang dicentang karena ini adalah bagian intrinsik dari fungsi kotak centang: itu interaktif dan dapat diubah (dan diatur ulang ke default, jika tombol reset formulir ada) oleh pengguna , dengan cara atribut lain sepertiid
tidak. Ini tidak ada hubungannya dengan fakta bahwa itu adalah atribut boolean.baik ini ditentukan oleh w3c apa itu atribut dan apa itu properti http://www.w3.org/TR/SVGTiny12/attributeTable.html
tetapi saat ini attr dan prop tidak begitu berbeda dan ada hampir sama
tetapi mereka lebih suka prop untuk beberapa hal
Yah sebenarnya Anda tidak perlu mengubah sesuatu jika Anda menggunakan attr atau prop atau keduanya, keduanya bekerja tetapi saya melihat dalam aplikasi saya sendiri bahwa prop bekerja di mana atrr tidak jadi saya mengambil 1,6 app prop =)
sumber
Perbedaan properti dan atribut HTML:
Pertama mari kita lihat definisi dari kata-kata ini sebelum mengevaluasi apa perbedaannya dalam HTML:
Definisi bahasa Inggris:
Dalam konteks HTML:
Ketika browser mem-parsing HTML, itu menciptakan struktur data pohon yang pada dasarnya adalah representasi memori dari HTML. Ini struktur data pohon berisi node yang elemen HTML dan teks. Atribut dan properti yang berkaitan dengan ini adalah sebagai berikut:
Penting juga untuk menyadari bahwa pemetaan properti ini bukan 1 banding 1. Dengan kata lain, tidak setiap atribut yang kami berikan pada elemen HTML akan memiliki properti DOM bernama serupa.
Selanjutnya memiliki elemen DOM yang berbeda sifat yang berbeda. Misalnya,
<input>
elemen memiliki properti nilai yang tidak ada pada<div>
properti.Contoh:
Mari kita ambil dokumen HTML berikut ini:
Kemudian kami memeriksa
<div>
, di konsol JS:Kami melihat properti DOM berikut (chrome devtools, tidak semua properti ditampilkan):
class
disediakan kata kunci dalam JS). Tapi sebenarnya 2 properti,classList
danclassName
.sumber