#javascript #html #jquery #for-loop
Вопрос:
Я хочу создать программу, которая выпишет текстовое содержимое элемента, который нажал. По какой-то причине эта программа получает только содержимое последнего элемента. Есть идеи, что я должен изменить внутри цикла for?
var emailname = document.querySelectorAll(".name");
var gSenderName = document.getElementById('sname');
$('.name').click(function() {
for (var i = 0; i < emailname.length; i ) {
const sendername = emailname[i].textContent;
gSenderName.textContent = sendername;
}
});
.name:hover {
text-decoration: underline;
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="name">first</div><br>
<div class="name">second</div><br>
<div class="name">third</div>
<br>
<div>Selected:
<div id="sname"></div>
</div>
Ответ №1:
Вам здесь вообще не нужна петля. Вы можете просто получить текст текущего щелкнутого элемента с помощью this
объекта. Я также посоветую вам не смешивать ванильный JS и jQuery без необходимости:
var gSenderName = $('#sname');
$('.name').click(function(){
gSenderName.text($(this).text());
});
.name:hover {
text-decoration: underline;
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="name">first</div><br>
<div class="name">second</div><br>
<div class="name">third</div>
<br>
<div>Selected:
<div id="sname"></div>
</div>
Ответ №2:
Цикл запускается и задает текстовое содержимое каждого элемента один за другим. Поскольку каждый переопределяет другой, вы всегда получаете последний.
Просто установите текстовое содержимое элемента, на который был нажат:
var gSenderName = document.getElementById('sname');
$('.name').click(e => {
gSenderName.textContent = e.target.textContent;
});
.name:hover {
text-decoration: underline;
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="name">first</div><br>
<div class="name">second</div><br>
<div class="name">third</div>
<br>
<div>Selected:
<div id="sname"></div>
</div>