Добавление значений объекта к определенным элементам span

#javascript #jquery

#javascript #jquery

Вопрос:

Из бэкэнда я отправляю список цен.

Нравится: [70, 90, 100, 140, 200]

У меня также есть <span> элементы с определенными классами внутри div:

 <span class="price_50_units"></span>
<span class="price_100_units"></span>
<span class="price_200_units"></span>
<span class="price_300_units"></span>
<span class="price_500_units"></span>
  

Мне нужно добавить эти элементы к его определенному диапазону. Первый элемент списка всегда будет соответствовать диапазону с class="price_50_units" :

 <span class="price_50_units">70</span> #should be the result for the first span.
  

Второй элемент всегда будет соответствовать диапазону с class="price_100_units" и так далее.

 <span class="price_100_units">90</span> #should be the result for the second span.
  

Прямо сейчас я могу поместить элементы span со значениями списка внутри div с помощью этого кода:

 req.done(function (response) {
     $('#prices').empty();
     var prices = response.prices;
     var list = '';
     for (var j = 0; j < prices.length; j  ) {
         list  = "<span>"   prices[j]   "</span></br>";
         }
     $('#prices').html(list);

    });
  

Этот код создаст новые элементы span со значениями из списка.

Но как настроить таргетинг на элементы span, уже присутствующие в html?

Я думал о чем-то подобном, но не работает:

  $('p').children('span .price_50_units').text(prices[1]);
  

Комментарии:

1. Поместите на них общий класс, выберите на основе класса, а затем настройка индекса элементов напрямую связана с индексом массива.

2. $('p').children('span.price_50_units').text(prices[1]);

Ответ №1:

Если индекс ответа и индекс диапазона имеют прямую корреляцию, то вы можете поместить общий класс в span и просто установить их тексты на основе индекса.

 var responseData = [70, 90, 100, 140, 200];

$('.price').text(function(index){
  return responseData[index];
});  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span class="price price_50_units"></span>
<span class="price price_100_units"></span>
<span class="price price_200_units"></span>
<span class="price price_300_units"></span>
<span class="price price_500_units"></span>  

Ответ №2:

Если ваши интервалы не всегда создаются по порядку, то, возможно:

 // Your data
var respData = [70, 90, 100, 140, 200];
// Loop through
$.each(respData, function(index, value ) {
  // Check if element exists. PS change selector if needed
  if($('span.price_'   value   '_units').length) {
    // add the value to the span
    $('span.price_'   value   '_units').text(value);
  }
});  

Комментарии:

1. Ошибка внутри StackOverflow при запуске фрагмента: { "message": "ReferenceError: $ is not defined", "filename": "https://stacksnippets.net/js", "lineno": 16, "colno": 1 }

2. @OmarGonzales Я не включил библиотеку jquery в свой ответ, поэтому вы получаете эту ошибку. Добавьте код в свое решение и попробуйте его. Обязательно измените respData, чтобы ваша переменная соответствовала результату.