поэтому я пытаюсь назначить фоновые изображения для div без использования CSS и пишу его примерно 6 раз, так что это HTML:
var arImages = ["Chicken_BannerIcon2-1.png", "Chicken_BannerIcon3-1.png",
"Chicken_BannerIcon4-1.png", "Chicken_BannerIcon5-1.png",
"Chicken_BannerIcon6-1.png", "Chicken_BannerIcon7-3.png",
]
var menu = document.querySelectorAll(".grid > div::before")
let bg = arImages.map((element) => {
return element;
})
let newArray = Array.from(menu).map((item) => {
var img = document.createElement("img")
img.src = bg
item.appendChild(img)
return item
})
<div class = "grid pt-3">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</div>
если вы хотите отобразить карту, вы можете сделать .map((item,index)=>{ ..... }). используйте индекс, чтобы добавить его, чтобы получить arImages по отдельности, вместо того, чтобы назначать, вероятно, в зависимости от того, что вы пытаетесь сделать
Сначала удалите селектор ::before
.
Затем вам просто нужно добавить индекс в ваш js, а затем сослаться на него в массив изображений следующим образом:
var arImages = [
"Chicken_BannerIcon2-1.png",
"Chicken_BannerIcon3-1.png",
"Chicken_BannerIcon4-1.png",
"Chicken_BannerIcon5-1.png",
"Chicken_BannerIcon6-1.png",
"Chicken_BannerIcon7-3.png"
];
document.querySelectorAll(".grid > div").forEach((item, index) => {
var img = document.createElement("img");
img.src = arImages[index];
item.appendChild(img);
});
<div class = "grid pt-3">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</div>
querySelectorAll
ничего не нашел из-за ::before
, поэтому я удалил этоimg.src = bg
не сработало, потому что bg
было таким же, как arImages
, и вам понадобится один индекс вместо полного массива (см. пункт 5)map
на forEach
, так как вам не нужно возвращаемое значениеArray.from
, потому что forEach
существует в нодлистеindex
, предоставленного foreach, для получения индекса из arImages
var arImages = [
"Chicken_BannerIcon2-1.png", "Chicken_BannerIcon3-1.png",
"Chicken_BannerIcon4-1.png", "Chicken_BannerIcon5-1.png",
"Chicken_BannerIcon6-1.png", "Chicken_BannerIcon7-3.png",
]
var menu = document.querySelectorAll(".grid > div")
menu.forEach((item, index) => {
var img = document.createElement("img")
img.src = arImages[index]
item.appendChild(img);
})
<div class = "grid pt-3">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</div>
Вам даже не нужен Array.from
. forEach
отлично работает с нодлистами (я думаю, что это единственный метод массива).
Спасибо за помощь, но я видел, где я ошибся
Рад, что это помогло. См.: что мне делать, когда кто-то ответит на мой вопрос?. Приветствуется голосование или принятие любых ответов, которые помогли.
Без проблем, сделаю
Другое дело, что они предназначены для фоновых изображений для каждого div @0stone0.
Вам даже не нужно предварительно определять элементы HTML. Вы можете программно выполнить map
для массива и создать массив строк HTML, используя данные из каждого элемента, join
, а затем применить эту полную строку HTML к контейнеру.
const arImages=['https://dummyimage.com/50x50/efefef/000000&text=Image1','https://dummyimage.com/50x50/efefef/000000&text=Image2','https://dummyimage.com/50x50/efefef/000000&text=Image3','https://dummyimage.com/50x50/efefef/000000&text=Image4','https://dummyimage.com/50x50/efefef/000000&text=Image5','https://dummyimage.com/50x50/efefef/000000&text=Image6'];
// Just select the container
const grid = document.querySelector('.grid');
// `map` over the array, and for each element return
// an HTML string where the element has background that
// matches the element
const html = arImages.map((img, i) => {
const style = `background-image: url(${img}); width: 50px; height: 50px`;
return `<div style = "${style}">${i + 1}</div>`;
});
// Because `map` returns an array we `join` it up
// into one string, and then add it to the container
grid.insertAdjacentHTML('beforeend', html.join(''));
<div class = "grid pt-3"></div>
Дополнительная документация
bg
такой же, как arImages, это новый массив со всеми значениями arImages