Задать вопрос
tunnelvision
@tunnelvision
Product Manager at Unihost.com

Пересчет значений на JS?

Приветствую.

Есть HTML документ. Условно, в нём содержатся следующие данные:
<span class="price">100 USD</span>
<span class="price">200 USD</span>
<span class="price">300 USD</span>

Возникла необходимость организовать пересчёт цен по отношению к другим валютам, при этом есть одна основная валюта, от которой всё и отталкивается. Т.е. на странице 1 должна быть одно значение (одна валюта), на странице 2 - другое с использованием одного и того же скрипта. Пересчитываться должны все значения на странице. На одной странице разных значений быть не может.

Прошу подсказать, как грамотно сделать это на клиенте (без SQL и иже с ними) и в какую сторону копать. Насколько я понимаю, проще всего это будет сделать с помощью чего-то вроде:
<span class="price" data-value="usd">100 USD</span>
<span class="price" data-value="eur">95 EUR</span>

Не совсем понимаю, как правильно это сделать с учетом того, что значения часто меняются, т.е. нужен наиболее удобный вариант для их постоянного изменения (вручную, тянуть неоткуда).

Спасибо заранее!
  • Вопрос задан
  • 902 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 2
Immortal_pony
@Immortal_pony Куратор тега JavaScript
1. Записываете значение в эталонной валюте в data-атрибут.
2. При переключении на другую валюту высчитывает коэффициент умножения.
3. Ввыводите пересчитанное значение.

Примерно так:
<span class="price" data-default-currency-value="100">100 USD</span>
<span class="price" data-default-currency-value="500">500 USD</span>
<button class="recalculate" data-currency="EUR">Recalculate in EUR</button>
<button class="recalculate" data-currency="RUB">Recalculate in RUB</button>


var currencyCoefficients = {
    EUR: 1.1,
    RUB: 65
};


$('.recalculate').on('click', function() {     
    var currency = $(this).data('currency');
    
    $('.price').each(function() { 
        var value = $(this).data('default-currency-value');
        var recalculatedValue = Math.ceil(value*currencyCoefficients[currency]);
        
        $(this).html(recalculatedValue + ' ' + currency);
    });
});


Пример: jsfiddle.net/2tpsshu3
Ответ написан
@lega
Пример - тоже самое что и у Immortal_pony, только попроще.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
miraage
@miraage
Старый прогер
Ответ написан
Комментировать
Я бы сделал так:
с бекенда передавал бы текущий курс валют по отношению к основной вида:
rates = {
usd:100,
eur:100
rub: 100
uah:100
}

а дальше скриптом проходился бы по элементам
.price[data-value]
и по курсу считал бы итоговую стоимость

Курс валют можно брать по АПИ почти любого банка
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
Wanted. Москва
от 250 000 до 400 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
22 янв. 2025, в 18:42
2000 руб./за проект
22 янв. 2025, в 18:00
15000 руб./за проект
22 янв. 2025, в 17:57
2000 руб./в час