Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите пожалуйста улучшить мини код (https://javascript.ru/forum/misc/69793-pomogite-pozhalujjsta-uluchshit-mini-kod.html)

jay-S 17.07.2017 20:31

Помогите пожалуйста улучшить мини код
 
есть валюты

отображают вот так <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

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

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>

jay-S 17.07.2017 21:50

а нельзя просто одним регулярным выражением вытащить все цифры вот так 4324324.42 ?

рони 17.07.2017 22:09

jay-S,
нельзя

jay-S 17.07.2017 22:22

вы 2 раза отправили вы посчитали что второй код лучше?
и можете пожалуйста объяснить чем он лучше моего чтобы я понимал пожалуйста.:)

рони 17.07.2017 23:24

jay-S,
первый пример достаёт данные и работает с ними,
второй сохраняет структуру данных, что вам нужнее, смотрите сами.

laimas 17.07.2017 23:44

Цитата:

Сообщение от 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 и прочие по базовой.


Часовой пояс GMT +3, время: 22:28.