#javascript #html #css #arrays #dom
Вопрос:
Как задать свойство CSS для нескольких элементов, имеющих один и тот же класс?
Что касается моей ситуации: я хотел бы знать, как установить background-image
для нескольких элементов один и тот же класс, используя ванильный JavaScript.
Допустим, у меня есть 5 div
учеников, каждый из которых имеет свой класс .panel
<div class="container">
<div class="panel">
<h3>Mesmerizing Mountains</h3>
</div>
<div class="panel">
<h3>The connecticut</h3>
</div>
<div class="panel">
<h3>Spooky forest</h3>
</div>
<div class="panel">
<h3>Wheat fields</h3>
</div>
<div class="panel">
<h3>Alpha Hills</h3>
</div>
</div>
Если у меня есть ссылки на изображения в виде массива, как это:
const imgLinks = ["https://example.com/panel_1img", "https://example.com/panel_2img", "https://example.com/panel_3img", "https://example.com/panel_4img", "https://example.com/panel_5img"]
Как я могу установить значение background-image
для каждого .panel
из элементов imgLinks
массива.
краткое примечание: Первый элемент в массиве должен быть background-image
первым .panel
Второй элемент в массиве должен быть background-image
вторым .panel
и так далее.
Комментарии:
1. Ну, в вашем примере у вас есть 5 элементов и только три изображения, так как же эти изображения должны быть применены?
2. @ScottMarcus я написал их в качестве ссылки. у меня действительно есть 5 изображений в реальном времени. В любом случае, я отредактирую его сейчас.
3. Нам все еще нужна дополнительная информация, какое изображение должно сочетаться с каким элементом?
4. @ScottMarcus Первым элементом в массиве должно быть фоновое изображение первого
.panel
Вторым элементом в массиве должно быть фоновое изображение второго.panel
и так далее.
Ответ №1:
Мы можем использовать querySelectorAll
, чтобы получить массив всех элементов с классом panel
и forEach
перебрать каждый из них.
const imgLinks = ["https://www.w3schools.com/cssref/paper.gif",
"https://www.w3schools.com/cssref/img_tree.gif",
"https://www.w3schools.com/cssref/img_tree.gif",
"https://www.w3schools.com/cssref/paper.gif",
"https://www.w3schools.com/cssref/img_tree.gif"];
/* images coutesy of w3schools.com */
document.querySelectorAll('.panel').forEach((e, i) => {
e.style.backgroundImage = `url('${imgLinks[i]}')`;
})
<div class="container">
<div class="panel">
<h3>Mesmerizing Mountains</h3>
</div>
<div class="panel">
<h3>The connecticut</h3>
</div>
<div class="panel">
<h3>Spooky forest</h3>
</div>
<div class="panel">
<h3>Wheat fields</h3>
</div>
<div class="panel">
<h3>Alpha Hills</h3>
</div>
</div>
Комментарии:
1. Но это работает только для первого
.panel
раза, верно?2. @PixieDust Я обновил свой ответ, чтобы продемонстрировать. В предыдущем примере был показан только один, потому что в массиве фактически существовал только один URL-адрес.
3. Обратите внимание, что вам нужно будет установить другие фоновые правила отдельно в вашем css.
4.
.panel
может быть использовано в другом месте, лучше отточить на.container .panel
5. Все в порядке. Я просто занимался мини-проектом в свободное время и использую chrome. Спасибо, что это решило мою проблему.