@igix

Как выгрузить ключи из JSON в атрибуты блоков html?

Добрый.

Есть JSON такого типа:

{
	"11" : {
		"name" : "One",
		"cost" : 10000,
		"description" : "Bla"
	},
	"22" : {
		"name" : "Two",
		"cost" : 11000,
		"description" : "Bla Bla"
	},
	"33" : {
		"name" : "Three",
		"cost" : 12000,
		"description" : "Bla Bla Bla"
	}

}

Как организовать выгрузку ключей (11, 22, 33) циклом в атрибуты блоков с классом item:
<div class="box">
	<div class="item"></div>
</div>
<div class="box">
	<div class="item"></div>
</div>
<div class="box">
	<div class="item"></div>
</div>

Чтобы в итоге получить что-то типа того:
<div class="box">
	<div class="item" data-id="11"></div>
</div>
<div class="box">
	<div class="item" data-id="22"></div>
</div>
<div class="box">
	<div class="item" data-id="33"></div>
</div>

Спасибо.
  • Вопрос задан
  • 221 просмотр
Решения вопроса 1
const myJson = `{
      "11": {
        "name": "One",
        "cost": 10000,
        "description": "Bla"
      },
      "22": {
        "name": "Two",
        "cost": 11000,
        "description": "Bla Bla"
      },
      "33": {
        "name": "Three",
        "cost": 12000,
        "description": "Bla Bla Bla"
      }

    }`;

    const keys = Object.keys(JSON.parse(myJson)); //массив ключей

    $('.box .item').each((index, item) => {
      $(item).attr('data-id', keys[index]);
    });
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Dr0nk
Junior Android Developer
keysVal = Object.keys(object);
for(i in keysVal){
    $(".item").eq(i).prop("data-id", keysVal[i]) 
}
Ответ написан
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
var json= {.....};
[].map.call(document.querySelectorAll('.item'), function(i, ind) {
	i.setAttribute("data-id", Object.keys(json)[ind]);
});
Ответ написан
Комментировать
DarkRaven
@DarkRaven
разработка программного обеспечения
Самый простой способ - это обойти JSON:
var json =  { /*тут ваш JSON*/ };
var index = 0; 
var root = getRoot() // функция, отдающая блок, в котором есть ваш HTML, объект jQuery
for (var p in json) { 
    if (json.hasOwnProperty(p)) {
        //Получить див по индексу внутри контейнера, объект jQuery
        var div = getDivByIndexFromRoot(root, index); 
        div.data('id', p);
    }
}


getRoot, getDivByIndexFromRoot - выдуманные функции, поведение которых описано в комментариях.

Возможно, есть и другие, более элегантные решения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы