У меня есть следующие привязки на странице:
<a href="#" data-json='{"first":"SGVsbG8=","last":"V29ybGQ=","mail":"aGVsbG9Ad29ybGQuY29t","favorite":"eWVz","answer":"VGhpcyBpcyBteSBhbnN3ZXJzIQ==","id":"MQ==","read":"yes"}'>Hello</a>
<a href="#" data-json='{"first":"SGVsbG8=","last":"V29ybGQ=","mail":"aGVsbG9Ad29ybGQuY29t","favorite":"eWVz","answer":"VGhpcyBpcyBteSBhbnN3ZXJzIQ==","id":"MQ==","read":"no"}'>Hello</a>
Я хочу изменить значение read
данных json для no
для якорей, first
значение которых - SGVsbG8=
Я пробовал следовать, но не работал:
($('.usr-list a').data('json').first == 'SGVsbG8=').each(function(i){$(this).data('json').read('no')});
Можно ли это сделать?
Да, это возможно. Результат сравнения ($('.usr-list a').data('json').first == 'SGVsbG8=')
- это логическое значение, которое не имеет each
метода, для фильтрации элементов, которые вы должны повторять через них и прочитать их data-json
атрибуты data-json
:
$('a').each(function () {
var o = $(this).data('json');
if (o.first === 'SGVsbG8=') {
o.read = 'no';
}
});
Обратите внимание, что приведенный выше фрагмент не изменяет data-json
. Метод data
jQuery после разбора data-*
хранит их внутренне. Если вы хотите изменить атрибуты после изменения свойства, вы должны JSON закодировать объекты и сбросить атрибуты.
this.setAttribute('data-json', JSON.stringify(o));
function updateJson(object) {
$("a").each(function() {
var json = $(this).data("json");
if(json["first"]==object["first"]) {
json["read"] = "no";
$(this).data("json",json);
}
});
}
updateJson({first : "SGVsbG8="});
Это может быть использовано для этой цели :)
data-json="{'first':'SGVsbG8='...