@vladislav198712

Как получить текст через несколько элементов?

Всем привет! Есть вот такой скрипт для умножения количества товара на стоимость

const qty = document.querySelectorAll('.quantity');
        for(let i=0;i<qty.length;i++){
            let amount = qty[i].nextElementSibling;
            let price = +parseInt(amount.textContent);
            qty[i].addEventListener('input', () => amount.textContent = qty[i].value*price+'₴');
        }


Он отлично работает если после input сразу идёт строка с ценой, в моем случае это span. Но стоит добавить что-то между input и span, скрипт перестает работать. В примере ниже скрипт работает только на первом и втором элементе.

<div class="">
    <h5>Первый элемент</h5>
    <input class="quantity" type="number" min="1" max="99" value="1" title="Количество" inputmode="numeric">
    <span class="price-amount">888<span>₴</span></span>
  </div>
  <div class="">
    <h5>Второй элемент</h5>
    <input class="quantity" type="number" min="1" max="99" value="1" title="Количество" inputmode="numeric">
    <span class="price-amount">888<span>₴</span></span>
  </div>
  <div class="">
    <h5>Третий элемент</h5>
    <input class="quantity" type="number" min="1" max="99" value="1" title="Количество" inputmode="numeric">
    <p>Описание товара</p>
    <span class="price-amount">888<span>₴</span></span>
  </div>


Это происходит из-за nextElementSibling в js. Как правильно указать что нужен не следующий элемент, а например через одну строку, либо через две?
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
Да вариантов много. например:
qty[i].parentElement.querySelector('.price-amount')

Возьмёт родителя для qty[i] и найдёт в нём первый элемент с классом .price-amount.
В таком случае порядок вообще не важен, хоть перед инпутом, хоть вложите span в другой див. Главное чтобы родитель для qty[i] был родителем любого порядка и для price-amount
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
-let amount = qty[i].nextElementSibling;
+let amount = qty[i].parentElement.querySelector('.price-amount);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы