Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.07.2017, 20:31
Аспирант
Отправить личное сообщение для jay-S Посмотреть профиль Найти все сообщения от jay-S
 
Регистрация: 05.10.2011
Сообщений: 42

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

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



помогите улучшить мое дерьмо пожалуйста.
Ответить с цитированием
  #2 (permalink)  
Старый 17.07.2017, 21:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 20,842

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>
Ответить с цитированием
  #3 (permalink)  
Старый 17.07.2017, 21:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 20,842

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>
Ответить с цитированием
  #4 (permalink)  
Старый 17.07.2017, 21:50
Аспирант
Отправить личное сообщение для jay-S Посмотреть профиль Найти все сообщения от jay-S
 
Регистрация: 05.10.2011
Сообщений: 42

а нельзя просто одним регулярным выражением вытащить все цифры вот так 4324324.42 ?
Ответить с цитированием
  #5 (permalink)  
Старый 17.07.2017, 22:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 20,842

jay-S,
нельзя
Ответить с цитированием
  #6 (permalink)  
Старый 17.07.2017, 22:22
Аспирант
Отправить личное сообщение для jay-S Посмотреть профиль Найти все сообщения от jay-S
 
Регистрация: 05.10.2011
Сообщений: 42

вы 2 раза отправили вы посчитали что второй код лучше?
и можете пожалуйста объяснить чем он лучше моего чтобы я понимал пожалуйста.
Ответить с цитированием
  #7 (permalink)  
Старый 17.07.2017, 23:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 20,842

jay-S,
первый пример достаёт данные и работает с ними,
второй сохраняет структуру данных, что вам нужнее, смотрите сами.
Ответить с цитированием
  #8 (permalink)  
Старый 17.07.2017, 23:44
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 6,967

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста доработать код AntonMs Общие вопросы Javascript 3 15.06.2015 16:18
Помогите изменить код SergoMorello AJAX и COMET 4 18.04.2013 19:32
Помогите пожалуйста вычислить общую сумму katalizator Общие вопросы Javascript 15 22.03.2013 14:26
Ребята проверьте пожалуйста .js код Alenka1990 Общие вопросы Javascript 1 16.03.2013 10:34
Помогите пожалуйста разобраться Kupu4 Ваши сайты и скрипты 0 21.01.2010 09:44