#javascript #arrays
#javascript #массивы
Вопрос:
У меня есть массив, содержащий 4 элемента, и я хочу, чтобы каждый из этих элементов отображался в своем собственном div.
<div id="chord-box"></div>
<div id="chord-box"></div>
<div id="chord-box"></div>
<div id="chord-box"></div>
const chordsArray = ['C', 'Dm', 'Em', 'F'];
const chordBox = document.getElementById('chord-box');
Как мне заставить каждый элемент массива отображаться в своем собственном div?
Комментарии:
1. Здесь есть несколько проблем, в первую очередь из-за того, что вы используете an
id
несколько раз; его можно использовать только один раз2.
I want each of these items to display in its own div
, какой из них принадлежит какому div?
Ответ №1:
Другой способ — создавать элементы во время выполнения с большим преимуществом: вам не нужно, чтобы divs присутствовали (и в конечном количестве) в ваших строительных лесах, их количество будет зависеть от количества ваших аккордов.
const chordsArray = ['C', 'Dm', 'Em', 'F'];
const container = document.getElementById('container');
for(let i=0; i < chordsArray.length; i = 1){
let chord = document.createElement('div');
chord.innerHTML = chordsArray[i];
container.appendChild(chord);
}
<div id="container"></div>
Ответ №2:
Быстрый и грязный способ сделать это:
const chordsArray = ['C', 'Dm', 'Em', 'F'];
const chordBox = document.getElementsByClassName('chord-box');
for(let i = 0; i < chordBox.length; i ) {
chordBox[i].innerText = chordsArray[i];
}
<div class="chord-box"></div>
<div class="chord-box"></div>
<div class="chord-box"></div>
<div class="chord-box"></div>
Мысли
Обратите внимание, что я изменил id
класс to; id
атрибут должен существовать только для 1 элемента одновременно. Это identifier
, в то время как, class
представляет группу или класс элементов.
В этом примере предполагается, что у вас будет равное количество div
s, поскольку у вас есть элементы в массиве; это очень наивный способ мышления, вероятно, divs следует вводить по мере необходимости:
const chordsArray = ['C', 'Dm', 'Em', 'F'];
const chordsContainer = document.getElementById("chords-container");
for(let i = 0; i < chordsArray.length; i ) {
chordsContainer.innerHTML = '<div>' chordsArray[i] '</div>';
}
<div id="chords-container"></div>
Надеюсь, это поможет!
Ответ №3:
вы могли бы использовать этот код, который генерирует поля динамически
var chordsArray = ['C', 'Dm', 'Em', 'F'];
var bodyElement = document.getElementsByTagName("body")[0];
for(var i = 0; i < chordBox.length; i ) {
var chordBox = document.createElement("div");
chordBox.className = "chord-box";
chordBox.innerHTML = chordsArray[i];
bodyElement.appendChild(chordBox);
}
В этом случае я добавляю поля в элемент body.
Ответ №4:
Хороший вопрос. Вы могли бы попробовать что-то подобное, прокручивая свой массив аккордов и генерируя из него HTML.
const html = ['C', 'Dm', 'Em', 'F'].map(chord => {return `<div id='${chord}'>${chord}</div> `}).join('')
const chordsContainer = document.getElementById("chords-container");
chordsContainer.innerHTML = html
Чтобы разбить его:
- Создайте массив
['C', 'Dm', 'Em', 'F']
- Перебирайте каждый аккорд
map
, называя каждый элемент по мере его выходаchord
- Генерируйте html, возвращая каждый раз
<div id='${chord}'>${chord}</div>
- Объедините массив в строку HTML
.join('')
- Наконец, добавьте недавно созданный HTML-код в chordsContainer
Подробнее читайте в map -> Javascript Array.map() в Mozilla MDN
Ответ №5:
Я изменил id с помощью class, чтобы поместить каждое значение массива в соответствующий div, вы можете использовать JavaScript для перебора массива и присвоения каждого значения свойству innerText соответствующего div.
const chordsArray = ['C', 'Dm', 'Em', 'F'];
const chordBoxes = document.querySelectorAll(".chord-box");
// for loop
for (let i = 0; i < chordsArray.length; i ) {
chordBoxes[i].innerText = chordsArray[i];
}
// forEach loop
chordsArray.forEach((value, index) => {
chordBoxes[index].innerText = value;
});
<div class="chord-box"></div>
<div class="chord-box"></div>
<div class="chord-box"></div>
<div class="chord-box"></div>