DOMへのデータ属性の追加


170
$('div').data('info', 1);

alert($('div').data('info'));
//this works    

$('div[data-info="1"]').text('222');
//but this don't work

jquery内に要素を作成しています。その後、属性「データ」を追加したいと思います。彼は好きで追加されていますが、DOMではこれは明らかではなく、次を使用してアイテムを取得できません

$('div[data-example="example"]').html()

jsfiddle

回答:


423

次の.data()方法を使用します。

$('div').data('info', '222');

これは実際のdata-info属性を作成しないことに注意してください。属性を作成する必要がある場合は、次を使用します.attr()

$('div').attr('data-info', '222');

6
@Luntegg:.data()実際に使用する理由がない限り使用します.attr()
Blender 2013

9
.data()動作しません。これは、DOMにデータ属性を追加していない、と私は、データの属性によって要素を得ることはありません...
Luntegg

2
また、文字列でなければなりません-$( 'div')。attr( 'data-info'、 '' + info.id)
daviestar

1
.data(key, val)attrを作成するようです。誰もがなぜそれをしないのか知っていますか?
Luke W、

16
Note that this doesn't create an actual data-info attribute. If you need to create the attribute, use .attr():これが私の問題の鍵でした。どうもありがとう。
Mikayil Abdullayev

28

jQueryの.data()は2つのことを行いますが、データを属性としてDOMに追加しません。これを使用してデータ属性を取得する場合、最初に行うことはjQueryデータオブジェクトを作成し、オブジェクトの値をデータ属性に設定することです。その後、それは本質的にdata属性から切り離されます。

例:

<div data-foo="bar"></div>

を使用して属性の値を取得した場合、.data('foo')期待どおりに「bar」が返されます。次にを使用.attr('data-foo', 'blah')して属性を変更し、後でを使用.data('foo')して値を取得すると、DOMがと言っても「bar」を返しますdata-foo="blah"。を使用.data()して値を設定すると、jQueryオブジェクトの値は変更されますが、DOMの値は変更されません。

基本的に.data()は、jQueryオブジェクトのデータ値を設定またはチェックするためのものです。チェックしていて、まだ持っていない場合は、DOM内のデータ属性に基づいて値を作成します。.attr()DOM要素の属性値を設定またはチェックするためのものであり、jQueryデータ値には触れません。両方を変更する必要がある場合は、.data()との両方を使用する必要があります.attr()。それ以外の場合は、どちらかにこだわってください。


14

Jqueryの「データ」はデフォルトでは更新されません:

alert($('#outer').html());
var a = $('#mydiv').data('myval'); //getter
$('#mydiv').data("myval","20"); //setter
alert($('#outer').html());

ライブアップデートの代わりに「attr」を使用します。

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

4
 $(document.createElement("img")).attr({
                src: 'https://graph.facebook.com/'+friend.id+'/picture',
                title: friend.name ,
                'data-friend-id':friend.id,
                'data-friend-name':friend.name
            }).appendTo(divContainer);

3
おそらく、他の人を助けるために、コードで何が起こっているのかを説明できます。
Mohamad Shiralizadeh

3

を使用.data()すると、その要素のjQueryオブジェクトにデータが追加されるだけです。要素自体に情報を追加するには、jQuery .attrまたはネイティブを使用してその要素にアクセスする必要があります.setAttribute

$('div').attr('data-info', 1);
$('div')[0].setAttribute('data-info',1);

属性が設定された要素にアクセスするには、投稿($('div[data-info="1"]'))でメモしたように、その属性に基づいて選択するだけですが、使用する.data()場合はできません。.data()設定に基づいて選択するには、jQueryのフィルター関数を使用する必要があります。

jsFiddle Demo

$('div').data('info', 1);
//alert($('div').data('info'));//1

$('div').filter(function(){
   return $(this).data('info') == 1; 
}).text('222');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>1</div>


0

からテキストを取得するには

<option value="1" data-sigla="AC">Acre</option>

uf = $("#selectestado option:selected").attr('data-sigla');
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.