Доступ к элементам JQuery data-json

0

У меня есть следующие привязки на странице:

<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')});

Можно ли это сделать?

  • 5
    Это действительно допустимая разметка? Если вы не используете одинарные кавычки внутри data-json, например: data-json="{'first':'SGVsbG8='...
  • 1
    @Niklas Я только что скопировал со страницы источника, поэтому получил двойные кавычки
Теги:

2 ответа

1
Лучший ответ

Да, это возможно. Результат сравнения ($('.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));
1
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="});

Это может быть использовано для этой цели :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню