193
$('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

4

6 回答 6

489

使用.data()方法:

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

请注意,这不会创建实际data-info属性。如果您需要创建属性,请使用.attr()

$('div').attr('data-info', '222');
于 2013-02-18T11:28:35.803 回答
31

jQuery 的 .data() 做了几件事,但它不会将数据作为属性添加到 DOM。当使用它来获取数据属性时,它所做的第一件事就是创建一个 jQuery 数据对象并将对象的值设置为数据属性。之后,它基本上与数据属性分离。

例子:

<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()。否则,坚持一个或另一个。

于 2015-02-07T00:02:34.227 回答
16

在 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());
于 2016-02-08T17:31:12.497 回答
5
 $(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);
于 2013-11-26T09:58:16.937 回答
4

使用.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>

于 2015-02-07T00:13:08.313 回答
0

从 a 中获取文本

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

uf = $("#selectestado option:selected").attr('data-sigla');
于 2018-03-01T17:25:22.540 回答