#javascript #html #arrays #ajax
#javascript #HTML #массивы #ajax
Вопрос:
Быстрый вопрос: можно ли заменить значения элементов одним и тем ЖЕ классом с разными значениями?
Вот что я имею в виду: у меня есть этот массив, возвращенный ответом AJAX:
[
"$63.00 / Night",
"$68.00 / Night",
"$58.00 / Night",
"$50.00 / Night"
]
Приведенный выше массив генерируется из ответа html, который выглядит следующим образом:
var result = [
"$63.00 / Night",
"$68.00 / Night",
"$58.00 / Night",
"$50.00 / Night"
];
console.log(result[0]);
result.forEach(function(item)
{
var num_price = parseFloat(item.replace( /[^d.]*/g, ''));
num_price = num_price * 2;
console.log(num_price);
$('.gdlr-tail').html(num_price);
});
<span class="gdlr-tail">$63.00 / Night</span>
<span class="gdlr-tail">$65.00 / Night</span>
<span class="gdlr-tail">$67.00 / Night</span>
<span class="gdlr-tail">$72.00 / Night</span>
Из вышесказанного проблема возникает в последней строке кода: $('.gdlr-tail').html(num_price);
где все значения в моем .gdlr-tail
классе отображаются как значение первого диапазона, т.е. Все значения в классе устанавливаются 126(63*2)
равными. Это происходит, хотя мой массив находится внутри цикла. Вычисляется только первый элемент, а для всех остальных элементов устанавливается значение этого вычисления.
Где я мог ошибиться?
Комментарии:
1. Вам тоже нужно выполнить итерацию
$('.gdlr-tail')
. Вот почему обновляется только первый элемент. Я предлагаю вам использовать afor
и использовать индекс для адресации элементов в обоих массивах.
Ответ №1:
Повторяйте .gdlr-tail
элементы, а не цены. Затем присвоите каждому элементу соответствующее значение из массива:
var result = [
"$63.00 / Night",
"$68.00 / Night",
"$58.00 / Night",
"$50.00 / Night"
];
$('.gdlr-tail').each(function(index, el)
{
var num_price = parseFloat(result[index].replace( /[^d.]*/g, ''));
num_price = num_price * 2;
$(el).html(num_price);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="gdlr-tail">$63.00 / Night</span>
<span class="gdlr-tail">$65.00 / Night</span>
<span class="gdlr-tail">$67.00 / Night</span>
<span class="gdlr-tail">$72.00 / Night</span>
Комментарии:
1. Элегантный и лаконичный, на мой взгляд, должен быть отмечен как ответ
2. Красивые. дважды вы спасли мой бекон. Спасибо. следует отметить, что другие ответы также верны
Ответ №2:
Это так, но для здравомыслия всегда лучше сначала сгруппировать их, чтобы избежать нежелательных изменений в другом месте страницы:
var result = [
"$63.00 / Night",
"$68.00 / Night",
"$58.00 / Night",
"$50.00 / Night"
];
result.forEach(function(item, index) {
var num_price = parseFloat(item.replace(/[^d.]*/g, ''));
num_price = num_price * 2;
console.log(num_price);
$('.gdlr-tail-parent .gdlr-tail:nth-child(' (index 1) ')').html(num_price);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="gdlr-tail-parent">
<span class="gdlr-tail">$63.00 / Night</span>
<span class="gdlr-tail">$65.00 / Night</span>
<span class="gdlr-tail">$67.00 / Night</span>
<span class="gdlr-tail">$72.00 / Night</span>
</div>
Ответ №3:
Я предполагаю, что после чего-то подобного->
С переформатированием тоже. ?
var result = [
"$63.00 / Night",
"$68.00 / Night",
"$58.00 / Night",
"$50.00 / Night"
];
var tails = $('.gdlr-tail');
result.forEach(function(item, index)
{
var num_price = parseFloat(item.replace( /[^d.]*/g, ''));
num_price = num_price * 2;
$(tails[index]).text("$" num_price.toFixed(2) " / Night");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="gdlr-tail">$63.00 / Night</span>
<span class="gdlr-tail">$65.00 / Night</span>
<span class="gdlr-tail">$67.00 / Night</span>
<span class="gdlr-tail">$72.00 / Night</span>