17.07.2017, 20:31
|
Аспирант
|
|
Регистрация: 05.10.2011
Сообщений: 76
|
|
Помогите пожалуйста улучшить мини код
есть валюты
отображают вот так <span data-val="4">$7,84</span>
и для рубля = <span data-val="4">1 849,45 руб.</span>
var val = $(this).data(val);
var kak = $(this).text().replace(',','.').match(/((?:\d|\,)*\.?\d+)/g).join('');
var price = parseFloat(kak);
var total = (val * price);
помогите улучшить мое дерьмо пожалуйста.
|
|
17.07.2017, 21:01
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
jay-S,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function() {
$("[data-val]").each(function(indx, element){
var val = $(this).data("val");
var price = +$(this).text().replace(/[^\d,]/g,'').replace(/,(?=\d)/,'.')||0;
var total = (val * price).toFixed(2);
alert(total.replace(/\d(?=(?:\d{3})+(?:\D|$))/g,'$& '));
});
});
</script>
</head>
<body>
<span data-val="4">$7,84</span>
<span data-val="4">1 849,45 руб.</span>
</body>
</html>
|
|
17.07.2017, 21:14
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
jay-S,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function() {
$("[data-val]").each(function(indx, element){
var val = $(this).data("val");
var text = $(this).text().replace(/\d.*\d/,function(price) {
price = +price.replace(',','.').replace(/\s/g,'')||0;
price = (val * price).toFixed(2)
.replace('.',',')
.replace(/\d(?=(?:\d{3})+(?:\D|$))/g,'$& ')
return price
});
$(this).text(text)
});
});
</script>
</head>
<body>
<span data-val="4">$7,84</span>
<span data-val="4">1 849,45 руб.</span>
</body>
</html>
|
|
17.07.2017, 21:50
|
Аспирант
|
|
Регистрация: 05.10.2011
Сообщений: 76
|
|
а нельзя просто одним регулярным выражением вытащить все цифры вот так 4324324.42 ?
|
|
17.07.2017, 22:09
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
jay-S,
нельзя
|
|
17.07.2017, 22:22
|
Аспирант
|
|
Регистрация: 05.10.2011
Сообщений: 76
|
|
вы 2 раза отправили вы посчитали что второй код лучше?
и можете пожалуйста объяснить чем он лучше моего чтобы я понимал пожалуйста.
|
|
17.07.2017, 23:24
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
jay-S,
первый пример достаёт данные и работает с ними,
второй сохраняет структуру данных, что вам нужнее, смотрите сами.
|
|
17.07.2017, 23:44
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от jay-S
|
var val = $(this).data(val);
$(this).text().replace....
var total = (val * price);
|
Не лучше ли отказаться от такого похода? Что мешает в data помещать все сразу: data-val="[4,7.84] "> и data-val="[4,1849.45]", и рассчитывать как
var val = $(this).data('val');
var total = val[0] * val[1];
Да и вообще, хотя можно конечно держать в базе цены в разных валютах, но проще иметь в одной базовой, получая остальные по текущему курсу. То есть, если на странице может быть <span>$7,84</span> и <span>1 849,45 руб.</span>, но одна из них результат расчета по курсу и только для отображения, а расчеты для total и прочие по базовой.
|
|
|
|