2011-03-31 14 views
32

İşte davranışı göstermek için basit bir örnek:

bu html biçimlendirme Verilen:

<div data-company="Microsoft"></div> 

ve (jQuery 1.5.1 kullanarak) bu jQuery kodu:

// read the data 
alert($("div").data("company")); 
// returns Microsoft <<< OK! 

// set the data 
$("div").data("company","Apple"); 
alert($("div").data("company")); 
// returns Apple <<< OK! 

// attribute selector 
alert($("div[data-company='Apple']").length); 
// returns 0 <<< WHY??? 

// attribute selector again 
alert($("div[data-company='Microsoft']").length); 
// returns 1 <<< WHY??? 

// set the attribute directly 
$("div").attr("data-company","Apple"); 
alert($("div[data-company='Apple']").length); 
// now returns 1 <<< OK! 

jQuery otomatik ithalat yana HTML5 verileri jQuery'nin veri nesnesine *, veriler değiştiğinde özelliklerin güncellenmemesi gerekir mi?

+1

@James '" div [data-company = 'Apple' ''' ile kapatmayı unutmuşsunuzdur] –

cevap

51

Normalde, .Data kullanarak tutarlı iseniz .data() 's roundtripping ihtiyaç vardır değil() DOM öğeleri verileri değiştirme// kümesine erişmek için. Bu nedenle, her .data() set/değiştirme işlemi için DOM'a erişmenin performans yükünden kaçınmak mantıklıdır (.data(), değerlerini jQuery.cache içinde dahili olarak saklar).

Gidiş dönüşümü davranışını kendiniz zorlamak istiyorsanız, "setData" veya "changeData" olaylarına abone olabilir ve .data() güncelleştirmesini bu olaylarda .attr() aracılığıyla ilgili DOM öğesine gönderebilirsiniz.

+2

Daha sonra, bir seçici bağlamında .data() kullanımı için tercih edilen yöntem hangisidir? Data-company = .data() ile ayarlanan/değiştirilen tüm Microsoft öğelerine erişmek istediğimi varsayalım? –

+1

'.data()' önbelleğine karşı sorgulama yapmak için kolay bir yöntem olduğunu sanmıyorum. Böyle bir seçici kullanmak isterseniz, bahsettiğim "changeData" olayındaki yuvarlak düzeltme işlemini uygulamanız gerekir. Daha sonra, veri niteliklerinizi '.data()' değişiklikleriyle eşzamanlı olarak koruyabilirsiniz (ayrıca bunu daha sonra sorgulamak istediğiniz öğeler üzerinde yalnızca seçici olarak da yapabilirsiniz). –

+0

Teşekkür ederim, Dave! Btw, dizininizi tekpub'de çok beğendim. –

16

Bu dokümanlara göre doğru bir davranıştır:

veriye özellikler veri özelliği olan erişim veya mutasyona uğramış daha sonra erişilebilir ve ilk kez olarak çekilir (tüm veriler değerler depolanabilir jQuery içinde dahili olarak.

(from: http://api.jquery.com/data)

+0

Bu her zaman böyle oldu mu, yoksa sürümlerden birinde mi değişti? –

+1

Bunun her zaman olduğu gibi görünüyor. Bu özellik ilk yayınlandığında, dokümanlardaki yukarıdaki alıntı da 1.4.3 sürüm notlarında yer almaktadır: http://blog.jquery.com/2010/10/16/jquery-143-released/ – Craig

İlgili konular