Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Конвертер цены (валют) на javascript (https://javascript.ru/forum/misc/63784-konverter-ceny-valyut-na-javascript.html)

dasistwas 29.06.2016 14:05

Конвертер цены (валют) на javascript
 
Есть HTML:
<div class="price">
                547 300руб.                <br />
</div><div class="price1"></div>


Нужно чтобы было так:
<div class="price">
                547 300руб.                <br />
</div><div class="price1">54,73руб</div>


Пытался сделать так:
$(function(){
      $each(function(){
	  var summ1 = document.getElementByClass('price1').innerHTML / 10000;
//как-то нужно сделать округление до двух знаков после запятой...
			document.getElementByClass('price1').innerHTML = summ1;

            });
});

Код не работает, т.к. в нем куча синтаксических ошибок. Знатоки, исправьте, плиз.

Rasy 29.06.2016 14:48

for (var i = 0; i < document.getElementsByClassName('price').length; i++) {
  var a = document.getElementsByClassName('price')[i].innerText.replace(/\D/g, ''),a = +a / 10000;
  document.getElementsByClassName('price')[i].nextElementSibling.innerText = a.toString().replace('.', ',')+'руб.';
}

dasistwas 29.06.2016 15:56

Rasy, не получилось у меня с твоим кодом, я реализовал вот так (через document.getElementById):
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
$(function(){
var summ_old = document.getElementById('txt2').innerHTML;
summ_old=summ_old.replace(/\s+/g,'');
var summ_old1 = parseFloat(summ_old);
var summ_new = summ_old1 / 10000;
document.getElementById('txt3').innerHTML = summ_new +'руб';
});
  </script>
</head>

<body>
<div id="txt2">2 447 800руб</div>
<div id='txt3'></div>

</body>

</html>

Как реализовать через document.getElementsByClassName?

Rasy 29.06.2016 16:09

Цитата:

Сообщение от dasistwas
Rasy, не получилось у меня с твоим кодом,

<body>
<div class="price">
                547 300руб.                <br />
</div><div class="price1"></div>


Нужно чтобы было так:
<div class="price">
                547 300руб.                <br />
</div><div class="price1">54,73руб</div>


<script>
for (var i = 0; i < document.getElementsByClassName('price').length; i++) {
  var a = document.getElementsByClassName('price')[i].innerText.replace(/\D/g, ''),a = +a / 10000;
  document.getElementsByClassName('price')[i].nextElementSibling.innerText = a.toString().replace('.', ',')+'руб.';
}


</script>

</body>


Цитата:

Сообщение от dasistwas
Как реализовать через document.getElementsByClassName?

Задать элементу класс.

dasistwas 29.06.2016 16:54

Вот почему не работало - скрипт должен был выполняться после открывающего тега body (т.к. getElementsByClassName должен быть в теле документа? А getElementById может быть и в head, необязательно в body?)
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>
<body>
<div class="price">
                547 300руб.                <br />
</div><div class="price1"></div>
<script>
for (var i = 0; i < document.getElementsByClassName('price').length; i++) {
  var a = document.getElementsByClassName('price')[i].innerText.replace(/\D/g, ''),a = +a / 10000;
  document.getElementsByClassName('price')[i].nextElementSibling.innerText = a.toString().replace('.', ',')+'руб.';
}
</script>
</body>
</html>

Rasy 29.06.2016 17:13

Функция обратного вызова javascript
 
dasistwas,
Скрипт может быть и в head, но тогда на объект window вешается слушатель, для обработки события загрузки дерева документа.

window.addEventListener('DOMContentLoaded', init);

function init() {
  console.log('success');
  // тут вызывается код...
}

laimas 30.06.2016 19:37

547 300руб. = 54,73руб - а где валюты то? Это не конвертация, а либо чудовищная инфляция, либо баг вывода сервера. )

Rasy 30.06.2016 20:15

В Беларуси деноминация, больше не миллионеры.

laimas 30.06.2016 20:27

Значит в базе нужно это сделать единожды.

Rasy 30.06.2016 20:34

тогда две цены выводить, пока люди не привыкнут


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