Содержимое одного div элемента по клику отображались в другом div элементе
Помогите пожалуйста! Есть изображения снизу. Надо что бы, при нажатии данные снизу отображались сверху. Из данных изображение(image) и текст(name). Никак не получается. Такой html
<div class="top">
<div class="hero" id="1">
<div class="image"><img src="img/nilfgaard.jpg" alt=""> </div>
<div class="name"><h1>Nilfgaard</h1></div>
</div>
</div>
<div class="Group-hero">
<div class="hero" id="1">
<div class="image"><img src="img/nilfgaard.jpg" alt=""> </div>
<div class="name"><h1>Nilfgaard</h1></div>
</div>
<div class="hero Redania" id="2">
<div class="image"><img src="img/redania.jpg" alt=""> </div>
<div class="name"><h1>Redania</h1></div>
</div>
<div class="hero Skellige" id="3">
<div class="image"><img src="img/skellige.jpg" alt=""> </div>
<div class="name"><h1>Skellige</h1></div>
</div>
</div>
Ответы (2 шт):
Автор решения: qwabra
→ Ссылка
выбрать всех героев
const heroes = Array.from(document.querySelectorAll('.Group-hero .hero'))на каждого из них навесить по бафу
- ,-
const magicText = e => document.getElementsByClassName('top')[0].appendChild(e.target)
Автор решения: Максим Талейников
→ Ссылка
- Определить контейнер, куда будут выводиться герои.
const showHeroWrap = document.querySelector('.top');
- Определить всех героев.
const heroes = document.querySelectorAll('.hero');
- Через цикл перебора
forEach, для каждого элемента назначить событиеclick.
heroes.forEach(hero => hero.addEventListener('click', event => { ... }));
- В теле функции события ты создаешь клон
.clonNode(true)элемента по которому кликаешь, но, так как событие срабатывает и на внутренних элементах, целевой элемент события и итоговый клон может быть другой элемент (вложенный), ты используешь метод.closest(), этот метод будет идти вверх по дереву, пока не упрется в искомый по CSS-селектору элемент.
const clone = event.target.closest('.hero').cloneNode(true);
- Очищение контейнера перед помещением туда клона, что бы не копить их там.
showHeroWrap.innerHTML = '';
- Помещение
.append()клонированного элементаcloneв контейнер.
showHeroWrap.append(clone);
const showHeroWrap = document.querySelector('.top');
const heroes = document.querySelectorAll('.hero');
heroes.forEach(hero => hero.addEventListener('click', event => {
const clone = event.target.closest('.hero').cloneNode(true);
showHeroWrap.innerHTML = '';
showHeroWrap.append(clone);
}));
.hero {
width: 100px;
height: 100px;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid #000;
border-radius: 50%;
}
.hero + .hero {
margin-left: 15px;
}
.name {
font-size: 10px;
}
.Group-hero {
display: flex;
margin: 20px;
}
.Group-hero .hero {
cursor: pointer;
}
<div class="top"></div>
<div class="Group-hero">
<div class="hero">
<div class="image"><img src="img/nilfgaard.jpg" alt=""> </div>
<div class="name"><h1>Nilfgaard</h1></div>
</div>
<div class="hero Redania">
<div class="image"><img src="img/redania.jpg" alt=""> </div>
<div class="name"><h1>Redania</h1></div>
</div>
<div class="hero Skellige">
<div class="image"><img src="img/skellige.jpg" alt=""> </div>
<div class="name"><h1>Skellige</h1></div>
</div>
</div>
