HTML öğelerinde veri özellikleri nasıl ayarlanır?


233

Özelliğe sahip bir div var data-myval = "10". Değerini güncellemek istiyorum; kullanırsam değişmez div.data('myval',20)mi? div.attr('data-myval','20')Yalnızca kullanmam gerekiyor mu?

HTML5 ve jQuery arasında kafam karışıyor mu? Tavsiye lütfen. Teşekkürler!

DÜZENLEME: Güncelleme div.data('myval')=20için div.data('myval',20), ama yine de HTML güncellenmesi değildir.


1
İçinde ne var div? Bir jQuery nesnesi veya öğesi mi?
Brad

2
div.data('myval')=20yalnızca sözdizimi yanlış olduğu için bir değer depolamaya çalışmaz - doğru sözdiziminin yanıtlarına bakın. Ancak .data(), element niteliğini gerçekten güncellemediğini , verileri başka bir yerde sakladığını unutmayın .
nnnnnn

GQuery'den kaçınma hissi olanlar için bunu kullanın -> div.dataset.myval = '20';
Harijs Krūtainis

Yanıtlar:


448

HTML

<div id="mydiv" data-myval="10"></div>

JS

var a = $('#mydiv').data('myval'); //getter

$('#mydiv').data('myval',20); //setter

gösteri

Referans

Referanstan:

jQuery, .data()yöntemi 'olaylar' ve 'tanıtıcı' adları altında kaydetmek için yöntemi kullanır ve ayrıca dahili kullanım için alt çizgi ('_') ile başlayan tüm veri adlarını saklar.

JQuery'nin HTML'deki niteliği data()değiştirmediğine dikkat edilmelidir data.

Bu nedenle, dataHTML'deki niteliği değiştirmeniz gerekirse .attr()bunun yerine kullanmanız gerekir .

HTML

<div id="outer">
    <div id="mydiv" data-myval="10"></div>
</div>

JS:

alert($('#outer').html());   // alerts <div id="mydiv" data-myval="10"> </div>
var a = $('#mydiv').data('myval'); //getter
$('#mydiv').attr("data-myval","20"); //setter
alert($('#outer').html());   //alerts <div id="mydiv" data-myval="20"> </div>

Bu demoya bakın


Neye ihtiyacın tutarlılık bilmiyorum, ama ben kullanımına öneriyoruz data()için getve setHTML-5 Veri özellikleri.
Jashwant

7
@Jashwant bunun yerine yararlı bir düzenleme olabilir: css kuralını düşünün [data-myval="10"]{ color: red; }, etiketi data özelliğinin değerine göre şekillendirir .
TechNyquist

4
.data çalışmıyor. .attr çalışır. belki cevabı açıklığa kavuşturmak için düzenleyebiliriz. birincisi çözüm gibi görünüyor, ancak biraz daha iyi ortaya çıkabilir. Daha iyi nasıl açıklanacağından emin değilim, yazıyı düzenlemememin nedeni budur.
Gaucho

@Gaucho, şimdi daha mı iyi?
18:15, Jashwant

1
@Gaucho .data yalnızca daha yeni jQuery> = 1.4.3 kullanıyorsanız çalışır, eski sürümler için .attr çalışır.
Ilias

41

Ayrıca aşağıdakileri de kullanabilirsiniz attr;

HTML

<div id="mydiv" data-myval="JohnCena"></div>

Senaryo

 $('#mydiv').attr('data-myval', 'Undertaker'); // sets 
 $('#mydiv').attr('data-myval'); // gets

VEYA

$('#mydiv').data('myval'); // gets value
$('#mydiv').data('myval','John Cena'); // sets value

6
Benim için sadece .attr ile çalıştı. Bu mümkün mü?
Zariweya

Çalıştığı için memnunum. .Data () çağrısı özeldir - yalnızca HTML5 veri özniteliklerini almakla kalmaz, aynı zamanda öznitelikleri değerlendirmeye / ayrıştırmaya çalışır. Bu nedenle, data-myval = '{"merhaba": "dünya"}' gibi bir öznitelik ile .data () yoluyla alındığında .attr () yoluyla alınırken bir dize döndürülür.
Baqer Naqvi

32

Javascript ile .data()html5 data-özniteliklerini değiştirdiğinizde jQuery'nin güncellenmediğini lütfen unutmayın .

JQuery kullanıyorsanız .data()setine data-daha iyi jQuery kullanmak niteliklerini HTML öğelerinde .data()onları okumak için. Aksi takdirde, öznitelikleri dinamik olarak güncellerseniz tutarsızlıklar olabilir. Örneğin, bakınız setAttribute(), dataset(), attr()aşağıda. Değeri değiştirin, düğmeye birkaç kez basın ve konsolu görün.


29

Vanilya Javascript çözümü

HTML

<div id="mydiv" data-myval="10"></div>

JavaScript:

  • DOM getAttribute()mülkünü kullanma

     var brand = mydiv.getAttribute("data-myval")//returns "10"
     mydiv.setAttribute("data-myval", "20")      //changes "data-myval" to "20"
     mydiv.removeAttribute("data-myval")         //removes "data-myval" attribute entirely
    
  • JavaScript'in datasetözelliğini kullanma

    var myval = mydiv.dataset.myval     //returns "10"
    mydiv.dataset.myval = '20'          //changes "data-myval" to "20"
    mydiv.dataset.myval = null          //removes "data-myval" attribute
    

8

JQuery kullanıyorsanız, şunu kullanın .data():

div.data('myval', 20);

İle rastgele veri depolayabilirsiniz .data(), ancak kullanırken sadece dizelerle sınırlandırılırsınız .attr().


14
O Not .data()yöntemi yok değil güncelleme data- özelliklerini olduğundan, bu özellikte bulunan yukarıya bitmiyor depolayan veri (ki bu olmayan dize değerlerini saklayabilir neden) bir gelen değer alabilir rağmen - data-özelliğinde. Her ne kadar soruyu sorduğumda OP'nin nitelikleri ayarlaması gerekmediğinden şüpheleniyorum .
nnnnnn

1
Ben bir sorun olacağını düşünmüyorum (ne belirttiğiniz yanı sıra, ya .attr()da öznitelik almak için kullanılan başka bir kod varsa ). Ben sadece OP açıkça (belki de yanlışlıkla) özellikleri güncelleme hakkında sordu göz önüne alındığında değer olduğunu düşündüm.
nnnnnn

1
@Blender bu sorumu gerçekten cevaplamıyor. HTML'yi güncellemek istiyorum, ancak aynı zamanda onu almak için element.data ('myval') kullanın.
Pulkit Mittal

1
Bunu yapmak gerekir çünkü belge yük oluşturulan öğeler veri öznitelikleri olanları var, ve bunu yeni dinamik öğeler için de istiyorum. Buna özel bir ihtiyaç olmayabileceğini biliyorum, ama tutarlılığı korumak istiyorum.
Pulkit Mittal

1
@PulkitMittal - .attr()Gerçekten "html" yi güncellemiyor olsanız bile , DOM'u güncellediğinizi unutmayın. Tarayıcıdan size "html" ( .html()DOM tarafından veya DOM tarafından element.innerHTML) vermesini istediğinizde, tarayıcı o anda DOM'un durumuna göre sizin için etkili bir şekilde yeniden oluşturur. Bir çeşit.
nnnnnn

3

[jQuery] .data () ve .attr () ve .extend () karşılaştırması

JQuery yöntemi .data(), eğer doğruysam, jQuery tarafından yönetilen bir iç nesneyi yöntem kullanarak güncelleştirir.

Gününüzü data-attributesbazı sürümlerle güncellemek isterseniz , -

$('body').attr({ 'data-test': 'text' });

- Aksi takdirde, $('body').attr('data-test', 'text');gayet iyi çalışacaktır.

Bunu başarmanın başka bir yolu da -

$.extend( $('body')[0].dataset, { datum: true } );

- herhangi bir özellik değişikliğini kısıtlar hangi HTMLElement.prototype.dataset, herhangi bir ek değilHTMLElement.prototype.attributes .


2

Data özniteliğini ayarlamanın başka bir yolu dataset özelliğini kullanmaktır.

<div id="user" data-id="1234567890" data-user="johndoe" data-date-of-birth>John Doe</div>

const el = document.querySelector('#user');

// el.id == 'user'
// el.dataset.id === '1234567890'
// el.dataset.user === 'johndoe'
// el.dataset.dateOfBirth === ''

// set the data attribute
el.dataset.dateOfBirth = '1960-10-03'; 
// Result: el.dataset.dateOfBirth === 1960-10-03

delete el.dataset.dateOfBirth;
// Result: el.dataset.dateOfBirth === undefined

// 'someDataAttr' in el.dataset === false
el.dataset.someDataAttr = 'mydata';
// Result: 'someDataAttr' in el.dataset === true

0

JQuery ve DOM'u senkronize tutmak için basit bir seçenek olabilir

$('#mydiv').data('myval',20).attr('data-myval',20);        
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.