#javascript
Вопрос:
Довольно новичок в JS, но обладаю небольшими знаниями в области программирования. Пытаюсь сделать что-то, возможно, немного выходящее за рамки моего опыта, но это часть проекта, над которым я работаю, и я надеюсь выполнить эту часть.
Я в основном хочу перебрать один список узлов, выполнить вычисления для этих элементов и поместить их в другой список узлов.
<span id ="item1">20</span><span id = "item2">0</span>
<span id ="item1">15</span><span id = "item2">0</span>
<span id ="item1">10</span><span id = "item2">0</span>
Я хочу умножить пункт 1 на 1000 и поместить эту цифру в пункт 2.
<span id ="item1">20</span><span id = "item2">20000</span>
<span id ="item1">15</span><span id = "item2">15000</span>
<span id ="item1">10</span><span id = "item2">10000</span>
Я ценю, что JS будет отображать приведенный выше код, но я надеюсь, что это немного прояснит то, что я хочу.
Я знаю, что мне нужно выбрать все с помощью querySelectAll:
var items = document.querySelectorAll('#item1');
Мне удалось сделать это для одного элемента с помощью querySelector, но я думаю, что, возможно, откусил больше, чем могу прожевать с помощью списка узлов! Я знаю, что мне нужно перебирать эти данные с помощью цикла for или forEach, но у JS, похоже, довольно много различных методов для перебора данных, а фактор списка узлов добавляет дополнительный уровень сложности!
Заранее спасибо за вашу помощь/подсказки!
Редактировать:
Отвечая на комментарии ниже, чтобы html был не совсем таким, я просто подумал, что, возможно, было бы проще сделать это в html. На самом деле это приложение Flask, поэтому код находится в шаблоне Jinja2, в котором просматриваются элементы из базы данных.
{% for x in y.items %}
...
<div class="card-footer"><span id ="item">{{ item.id }}</span><span id = "itemAnother"></span>*calculatedNumberHere*</div>
...
{% endfor %}
Редактировать:
<div class="card-footer"><span class="item">{{ item.id }}</span><span class="itemAnother"></span>*calculatedNumberHere*</div>
Был обновлен код Jinja2, и ответ Дивакара в JS был использован дословно, и это сработало.
Комментарии:
1.
id
атрибуты должны быть уникальными2. Вы должны пересмотреть логику, несколько одинаковых идентификаторов-недопустимый HTML, вместо этого используйте классы.
3. Ваша структура HTML усложняет работу, помимо наличия одного и того же идентификатора для нескольких элементов. 1 — вам нужно будет извлечь только нужный текст из родительского элемента, не включая ничего из дочернего элемента, 2 — ваша структура «промежуток внутри промежутка» заставляет все отображаться как одно длинное число
4. ребята, спасибо за эти комментарии, мне явно предстоит еще немного поработать с моим html. Ответ Дивакара ниже был ответом, и я запустил это.
Ответ №1:
Вам нужно использовать class
вместо id
const items1List = document.querySelectorAll('.item1')
const items2List = document.querySelectorAll('.item2')
items1List.forEach((item, index)=>{
const num = Number.parseInt(item.innerText)
if(!Number.isNaN()){
items2List[index].innerText = num * 1000
}
})
<span class='item1'>10</span>
<span class='item2'></span>
<span class='item1'>12</span>
<span class='item2'></span>
<span class='item1'>32</span>
<span class='item2'></span>
Комментарии:
1. Спасибо, чувак, это сработало! Мне явно нужно немного поработать здесь, но это действительно помогает мне продвигаться вперед в моем проекте!