У меня есть некоторый HTML-код, который я хочу поместить данные (API) в HTML-код с помощью циклов.
Каждый идентификатор является Продуктом , а каждый продукт имеет слоев , а каждый слой имеет некоторое значение варианты .
Мои данные похожи (API):
"data": [
{
"id": 1,
"name": null,
"price": 0,
"layers": [
]
},
{
"id": 2,
"name": "Product Name 2",
"price": 147,
"layers": [
{
"name": "Layer One for prodct 2",
"options": [
{
"image": "image-layer-00.jpg",
"hex": "EFEFEF"
}
]
},
{
"name": "Layer Two for product 2",
"options": [
{
"image": "image-layer-11.jpg",
"hex": "FFF"
}
]
}
]
},
{
"id": 3,
"name": "Product Number 3",
"price": 50,
"layers": [
{
"name": "Layer One for Product 3",
"options": [
{
"image": "image-layer1.jpg",
"hex": "000"
}
]
},
{
"name": "Layer Two for Product 3",
"options": [
{
"image": "image-layer2.jpg",
"hex": "fff"
}
]
},
{
"name": "Layer Three for Product 3",
"options": [
{
"image": "image-layer3.jpg",
"hex": "3A3A3A"
}
]
}
]
}
Поэтому я использовал цикл для отображения списка данных и его слоев, а также параметров. (код JavaScript ниже)
Но проблема в том, что мой код показывает все уровни всех продуктов (идентификаторов). Другими словами, слои продукта номер один, продукт номер два, продукт номер три ...
Я хочу отобразить только выбранные слои продукта, а не все. (например, если был выбран продукт 3, поэтому показывайте слои и параметры продукта 3, а не слои и параметры других продуктов.)
function selectModel() {
// This loop create Products List
for (var i = 0; i < data.length; i++) {
$('.list').append('<li data-value="/' + "URL" + '" class="option">' + data[i].name + ' - ' + data[i].price + '$' + '</li>');
// This loop create Products Layers
for (k = 0; k < data[i].layers.length; k++) {
var layersName = data[i].layers[k].name;
var layersListCode = `<div class="head-title" id="part-${k}">
<h3 id="title-${k}">${k}) ${layersName}:</h3>
<div class="colors" attr-number="${k}"> </div> </div>`;
document.getElementById("product-layers").insertAdjacentHTML("afterbegin", layersListCode);
// This loop create Options of Layer
for (j = 0; j < data[i].layers[k].options.length; j++) {
var optionHex = data[i].layers[k].options[j].hex;
var optionsListCode = `
<div>
<input type="radio" data-image="blue-0" id="blue-0" name="blue-0" value="blue-0">
<label for="blue-0"><span style="background-color: #${optionHex}"></span></label>
</div>`;
document.querySelector(".colors").insertAdjacentHTML("afterbegin", optionsListCode);
}
}
}
Я поместил приведенный выше пример HTML-кода, чтобы его было легче увидеть:
<!--- Product List -->
<ul class="list">
<li data-value="/URL" class="option">null - 0$ </li>
<li data-value="/URL" class="option">Product Name 2 - 147$</li>
<li data-value="/URL" class="option selected">Product Number 3 - 50$</li>
</ul>
<div id="product-layers">
<!-- Layers-->
<div class="head-title" id="part-1">
<h3 id="title-1">1) Null </h3>
<div class="colors" attr-number="1">
<!--- Options -->
</div>
</div>
<!-- Layers-->
<div class="head-title" id="part-2">
<h3 id="title-2">2) Product Name 2 </h3>
<div class="colors" attr-number="2">
<!--- Options -->
<div>
<input type="radio" data-image="blue-2" id="blue-2" name="blue-2" value="blue-2">
<label for="blue-2"><span style="background-color: #EFEFEF"></span></label>
</div>
<div>
<input type="radio" data-image="blue-2" id="blue-2" name="blue-2" value="blue-2">
<label for="blue-2"><span style="background-color: #fff"></span></label>
</div>
</div>
</div>
<!-- Layers-->
<div class="head-title" id="part-3">
<h3 id="title-3">3) Product Name 3 </h3>
<div class="colors" attr-number="3">
<!--- Options -->
<div>
<input type="radio" data-image="blue-3" id="blue-3" name="blue-3" value="blue-3">
<label for="blue-3"><span style="background-color: #000"></span></label>
</div>
<div>
<input type="radio" data-image="blue-3" id="blue-3" name="blue-3" value="blue-3">
<label for="blue-3"><span style="background-color: #fff"></span></label>
</div>
<div>
<input type="radio" data-image="blue-3" id="blue-3" name="blue-3" value="blue-3">
<label for="blue-3"><span style="background-color: #3A3A3A"></span></label>
</div>
</div>
</div>
</div>