Tim'in çok iyi söylediğini düşünüyorum , ama geri dönelim:
DOM öğesi bir nesnedir, bellekteki bir şeydir. OOP'taki çoğu nesne gibi, özellikleri de vardır . Ayrıca, öğe üzerinde tanımlanan özniteliklerin bir haritasına sahiptir (genellikle tarayıcının öğeyi oluşturmak için okuduğu işaretlemeden gelir). Elementin bazı özellikleri onların olsun başlangıçtaki değerleri nitelikler aynı veya benzer isimlerle (ile value
; "değer" özelliğindeki başlangıç değerini alır href
"href" özelliğindeki başlangıç değerini alır, ama tam olarak aynı değeri değil; className
dan "sınıf" özniteliği). Diğer özellikler başlangıç değerlerini başka şekillerde alır: Örneğin, parentNode
özellik üst öğesinin ne olduğuna bağlı olarak değerini alır;style
"stil" özniteliğine sahip olsun ya da olmasın.
Bu çapayı şu adreste bir sayfada ele alalım http://example.com/testing.html
:
<a href='foo.html' class='test one' name='fooAnchor' id='fooAnchor'>Hi</a>
Bazı gereksiz ASCII sanatı (ve birçok şeyi dışarıda bırakarak):
+ ------------------------------------------- +
| HTMLAnchorElement |
+ ------------------------------------------- +
| href: "http://example.com/foo.html" |
| adı: "fooAnchor" |
| id: "fooAnchor" |
| className: "bir test" |
| nitelikler: |
| href: "foo.html" |
| adı: "fooAnchor" |
| id: "fooAnchor" |
| sınıfı: "bir test" |
+ ------------------------------------------- +
Özelliklerin ve niteliklerin farklı olduğunu unutmayın.
Şimdi, her ne kadar farklı olsalar da, tüm bunlar sıfırdan tasarlanmış olmaktan ziyade geliştiğinden, bir dizi özellik, onları ayarlarsanız, türetdikleri özelliğe geri yazar. Ancak hepsi yapmaz ve href
yukarıdan da görebileceğiniz gibi, haritalama her zaman düz bir "değeri aktar" değildir, bazen yorumlama söz konusudur.
Bir nesnenin özellikleri olan özelliklerden bahsettiğimde, soyutta konuşmuyorum. Bazı jQuery kodu yok:
var link = document.getElementById('fooAnchor');
alert(link.href); // alerts "http://example.com/foo.html"
alert(link.getAttribute("href")); // alerts "foo.html"
(Bu değerler çoğu tarayıcı için geçerlidir; bazı varyasyonlar vardır.)
link
Nesne gerçek bir şey olduğunu ve bir erişmek arasındaki gerçek ayrım olduğu görülüyor özelliği üzerinde ve bir erişen niteliğini .
Tim'in dediği gibi, zamanın büyük çoğunluğu , mülklerle çalışmak istiyoruz. Kısmen bunun nedeni, değerlerinin (adlarının bile) tarayıcılarda daha tutarlı olma eğiliminde olmasıdır. Çoğunlukla yalnızca kendisiyle ilgili bir özellik olmadığında (özel özellikler) veya bu özel özellik için özelliğin ve özelliğin 1: 1 ( href
yukarıdaki ve "href" ile olduğu) olmadığını bildiğimizde özniteliklerle çalışmak isteriz. .
Standart özellikler çeşitli DOM özelliklerinde belirtilmiştir:
Bu özellikleri mükemmel dizinler var ve ben onlara linkler kullanışlı tutmak öneririz; Onları her zaman kullanıyorum.
Özel öznitelikler, örneğin, data-xyz
kodunuza meta veri sağlamak için öğelere koyabileceğiniz tüm öznitelikleri içerir (artık data-
ön eke bağlı kaldığınız sürece HTML5'ten itibaren geçerlidir ). (JQuery'nin son sürümleri data-xyz
, data
işlev aracılığıyla öğelere erişmenizi sağlar , ancak bu işlev yalnızca nitelikler için bir erişimci değildirdata-xyz
[hem daha fazla hem de daha az yapar]; aslında özelliklerine ihtiyacınız olmadıkça, attr
etkileşim için işlevi kullanırdım ile data-xyz
öznitelik.)
attr
Fonksiyon onlar tam anlamıyla özelliği alınırken yerine, istediğini ne düşündüğünü alma çevresindeki bazı dolambaçlı mantığı için kullanılır. Kavramları birleştirdi. Onlara taşınmak prop
ve attr
onları sınırlandırmak anlamına geliyordu. GO v1.6.0 jQuery Kısaca çok ileri bu konuda gitti, ama işlevselliği hızla geri eklendi için attr
insanlar kullanmaya ortak durumları işlemek için attr
teknik olarak kullandıkları gerekirken prop
.