Добавление атрибута данных в DOM

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

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

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

Я создаю элемент в jquery. После этого я хочу добавить атрибут "data". Он похож и добавляется, но в DOM это не очевидно, и я не могу получить элемент, используя

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

jsfiddle

6 ответов


использовать .data() способ:

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

обратите внимание, что это не создает реальной . Если вам нужно создать атрибут, используйте .attr():

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

jQuery .data () делает пару вещей, но не добавляет данные в DOM в качестве атрибута. При использовании его для захвата атрибута данных первое, что он делает, это создает объект данных jQuery и устанавливает значение объекта в атрибут данных. После этого он по существу отделяется от атрибута data.

пример:

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

если вы схватили значение атрибута с помощью .data('foo'), он вернет "бар", как и следовало ожидать. Если вы затем измените атрибут с помощью .attr('data-foo', 'blah') и затем использовать .data('foo') чтобы захватить значение, он вернет "bar", даже если DOM говорит data-foo="blah". Если вы используете .data() чтобы установить значение, оно изменит значение в объекте jQuery, но не в DOM.

по сути, .data() предназначен для установки или проверки значения данных объекта jQuery. Если вы проверяете его, и у него еще нет, он создает значение на основе атрибута данных, который находится в DOM. .attr() для установки или проверки DOM значение атрибута элемента и не тронет значение в jQuery. Если вам нужно, чтобы они оба изменились, вы должны использовать оба .data() и .attr(). В противном случае придерживайтесь того или другого.


в Jquery"данные" Не обновлять по умолчанию :

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

вы используете "attr " вместо live update:

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

 $(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);

используя .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>

чтобы получить текст из a

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

uf = $("#selectestado option:selected").attr('data-sigla');