JavaScript nesnelerini HTML öğelerine eklemenin iyi bir yolu var mı?


96

Bir JavaScript nesnesini bir HTML öğesi ile ilişkilendirmek istiyorum. Bunu yapmanın kolay bir yolu var mı?

HTML DOM'un bir setAttribute yöntemi tanımladığını ve bunun keyfi öznitelik adı için tanımlanmış gibi göründüğünü fark ettim . Ancak bu yalnızca dize değerlerini ayarlayabilir. (Elbette bunu anahtarları bir sözlüğe kaydetmek için kullanabilirsiniz.)

Özellikler (genel soruyla ilgilenmeme rağmen):

Özellikle, bir ağaçtaki düğümleri temsil eden HTML öğelerim var ve sürükle ve bırak özelliğini etkinleştirmeye çalışıyorum, ancak jQuery drop olayı bana yalnızca sürüklenip bırakılan öğeleri verecek.

Olay işleyicilerden bilgi almak için normal model, JavaScript nesnelerini oluştururken aynı anda HTML öğelerini oluşturmak ve ardından bu JavaScript nesnelerini kapatarak olay işleyicileri tanımlamak gibi görünüyor - ancak bu, bunda çok iyi çalışmıyor durum (Bir sürüklenme başladığında doldurulan küresel bir nesneye sahip olabilirim ... ama bu biraz iğrenç geliyor).

Yanıtlar:


44

JQuery data () yöntemine baktınız mı ? İsterseniz öğeye karmaşık nesneler atayabilir veya bu yöntemi en azından bir nesneye (veya başka bir veriye) başvuru tutmak için kullanabilirsiniz.


8
Teşekkür ederim: Aradığım şey buydu. İlginç bir şekilde, bu yöntemi tanımlamak için jquery, anahtarları her öğedeki bir dize özniteliğinde genel bir sözlüğe kaydeder. Bu dize özniteliğinin adı, jquery ilk yüklendiğinde rastgele oluşturulur. (Bunu yapmanın iyi bir yolu olmadığını
öne sürmek

6
JQuery'nin Bobince'nin verdiği cevabı kullanarak data() çalıştığını belirtmekte fayda var , bu yüzden zaten jquery kullanmıyorsanız, onu da kullanabilirsiniz.
Eamon Nerbonne

6
6 yıl sonra bu cevaba dönüp bakıp "bu çok yetersiz bir cevap. @Bobince kabul edilen cevaba sahip olmalı" diye düşünmem komik.
Phil.Wheeler

6
Bu soruda jQuery etiketi yok.
Michal Perłakowski

112

JavaScript nesnelerinin kendilerine atanmış keyfi özellikleri olabilir, buna izin vermek için yapmanız gereken özel bir şey yoktur. Bu, DOM öğelerini içerir; bu davranış DOM standardının bir parçası olmasa da, JavaScript'in ilk sürümlerine geri dönülmüştür ve tamamen güvenilirdir.

var div= document.getElementById('nav');
div.potato= ['lemons', 3];

6
@ tat.wright - Bahsettiği HTML öğelerindeki keyfi özelliklere Expando özellikleri denir. Ayrıca div.potato'nun div.getAttribute ("patates")
nickytonline

37
@Tim Down: o zaman yapma. Neden güvenilir olmadığını anlayamıyorum - String nesnesinin güvenilmez olduğunu söylemek gibi, çünkü onu null olarak ayarlayabilirsiniz.
simon

5
@TimDown: Ama ayarı olmaz document.expando = falsemola jQuery.data de?
Joey Adams

8
Tecrübelerime göre bunun kötü olmasının nedeni hafıza sızıntıları olabilir. Bundan kaçınmanın kolay bir yolu olabilir, ancak bunu yoğun bir şekilde kullanan bir tasarım yaptığımda birçok bellek sızıntısı oldu. Ekstra dikkatli olmanız gerektiğini düşünüyorum çünkü öğe sayfadan kaldırılırsa referans sayımı sizin için yapılmaz (temizlenmez) ve muhtemelen tam tersi.
eselk

8
Adil uyarı: Mutlu bir şekilde cevabın tarif ettiği şeyi yapıyordum, ancak alan adı "patates" yerine "kapsam" kullanıyordum. "Kapsam", tablo hücresi öğelerinin ( <td>) bir özniteliği ve bu alana atadığım nesnenin # toString'ed olduğu ortaya çıktı. Td.scope === '[nesne Nesnesi]' görünce çok kafam karıştı.
David Groomes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.