|
|
|
|
|
для: lexa8652
(16.06.2017 в 12:41)
| | Запрашиваемый сервер должен давать разрешение заголовком Access-Control-Allow-Origin, в противном случае из под веб страницы браузер заблокирует доступ к нему. Данный запрашиваемый ресурс разрешает, поэтому с него асинхронным запросом получается курс валюты, раз в сутки.
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style>
table {
border-collapse: separate;
font: 13px Arial;
}
th, td {
padding: 4px 8px;
border: 1px solid #bbb;
}
th {
background: #ccc;
}
em {
font-weight: normal;
font-size: 12px;
}
</style>
</head>
<body>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<table>
<tr>
<th>Наименование</th>
<th>Цена, <em>$</em></th>
<th>Цена, <em>руб.</em></th>
</tr>
<tr>
<td>название 1</td>
<td>10</td>
<td></td>
</tr>
<tr>
<td>название 2</td>
<td>20</td>
<td></td>
</tr>
<tr>
<td>название 3</td>
<td>30</td>
<td></td>
</tr>
</table>
<script>
var mem = localStorage, //хранилище
now = new Date().toISOString().substr(0, 10);
if(mem.curdate==undefined) { //курс по умолчанию
mem.curdate = '2017-06-10';
mem.current = 56.5131
}
if(mem.curdate != now) { //если в хранилище курс не текущей даты, то запрашиваем курс
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://query.yahooapis.com/v1/public/yql?q=select+*+from+yahoo.finance.xchange+where+pair+=+%22USDRUB%22&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys');
xhr.onload = function() {
if (xhr.status == 200) {
try { //сохраняем курс
now = JSON.parse(xhr.responseText).query;
mem.curdate = now.created.substr(0, 10);
mem.current = now.results.rate.Rate
} catch (e) {}
}
convert()
}
xhr.send()
} else convert();
function convert() {
[].slice.call(document.querySelector('table').rows, 1).forEach(function(tr) {
tr.cells[2].innerHTML = Math.round(tr.cells[1].innerHTML * mem.current);
})
}
</script>
</body>
</html>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: confirm
(13.06.2017 в 18:39)
| | Все это сложно для моего понимания. Наверно придется оставить ручной ввод курса валют. | |
|
|
|
|
|
|
|
для: lexa8652
(13.06.2017 в 17:21)
| | Если непосредственно с этой страницы, то данные о курсе можно получить только в том случае, если запрашиваемый ресурс передает соответствующий заголовок разрешающий доступ к его данным. В противном случае доступ к ним браузер заблокирует.
Если же исполнять не из под веб страницы, то можно запросить текущий курс и с ЦБ РФ. В среде Windows можно запустить эту страницу как приложение. Для этого достаточно добавить в нее соответствующие теги и сменить расширение на .hta. В таком режиме все ограничения снимаются и можно будет подключать и выполнять даже системные библиотеки. Поэтому без проблем или посредством Ajax, или просто используя IFRAME можно будет получить текущий курс валюты с любого ресурса. | |
|
|
|
|
|
|
|
для: confirm
(09.06.2017 в 01:30)
| | Подскажите, а можно вместо ручного ввода курса валюты сделать автоматический, что бы он подгружался (изменялся) автоматически? | |
|
|
|
|
|
|
|
для: lexa8652
(08.06.2017 в 23:23)
| | Если наряду с добавлением ячеек удалите и строку таблицы с курсом валюты, определяя ее непосредственно в скрипте, то нужно еще сделать небольшую правку. Циклом осуществляется проход не по всем строкам таблицы (коллекция rows), а начиная с третьей (они также имеют индексы начиная с 0), так как первая, это заголовок, а вторая с курсом валюты. Для этого из всей коллекции строк берется срез, начиная с третьей. Если удалить строку с курсом валют, то нужно брать срез начиная со второй. Для этого нужно изменить только индекс с 2 на 1 в этой строке кода:
[].slice.call(document.querySelector('table').rows, 1).forEach(function(tr) { | |
|
|
|
|
|
|
|
для: confirm
(08.06.2017 в 11:42)
| | Спасибо за детально развернутый ответ | |
|
|
|
|
|
|
|
для: lexa8652
(07.06.2017 в 21:56)
| | Что значит добавить? У вас это некая автономная html страница, если судить по описанию, в которую вы вручную добавляете курс валют. Кстати, выгоднее его помещать не в ячейку таблицу, удалив ее вообще, а непосредственно в js-код:
var usd = parseFloat(document.querySelector('#usd').innerHTML);
var usd = 56.5131393; //здесь указываем текущий курс валюты
|
А коли так, открывайте свою страницу в html редакторе и модифицируйте таблицу как хотите. Хотя можно и программно добавлять ячейки в таблицу, но вряд ли они вам нужны пустые, а значит чтобы программно их и заполнить, для этого скрипту нужно определить и данные для них. Но если определяем, то наверное уж лучше в редакторе сделать все.
А после модификации нужно будет подправить код. В цикле код получает из коллекции ячеек текущей строки таблицы конкретные ячейки по их индексу. Индекс ячеек начинается с 0. То есть
tr.cells[2].innerHTML = Math.round(tr.cells[1].innerHTML * usd);
означает
значение ячейки 3 (индекс 2) = значению ячейки 2 (индекс 1) умноженному на курс валюты. | |
|
|
|
|
|
|
|
для: confirm
(07.06.2017 в 08:52)
| | Подскажите пожалуйста, что нужно изменить в скрипте чтобы добавить пару колонок с лева от колонки цены в $ | |
|
|
|
|
|
|
|
для: confirm
(07.06.2017 в 08:52)
| | Спасибо!!! Все работает супер | |
|
|
|
|
|
|
|
для: lexa8652
(06.06.2017 в 23:24)
| | Можно
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<table style="width: 235px;">
<tbody>
<tr>
<td style="width: 186px;">наименование</td>
<td style="width: 29px;">цена, $</td>
<td style="width: 10px;">цена, руб.</td>
</tr>
<tr>
<td style="width: 186px;" colspan="3" id="usd">
56.5131393
</td>
</tr>
<tr>
<td style="width: 186px;">название 1</td>
<td style="width: 29px;">10</td>
<td style="width: 10px;"> </td>
</tr>
<tr>
<td style="width: 186px;">название 2</td>
<td style="width: 29px;">20</td>
<td style="width: 10px;"> </td>
</tr>
<tr>
<td style="width: 186px;">название 3</td>
<td style="width: 29px;">30</td>
<td style="width: 10px;"> </td>
</tr>
</tbody>
</table>
<script>
var usd = parseFloat(document.querySelector('#usd').innerHTML);
[].slice.call(document.querySelector('table').rows, 2).forEach(function(tr) {
tr.cells[2].innerHTML = Math.round(tr.cells[1].innerHTML * usd); //или с десятичными значениями до двух (tr.cells[1].innerHTML * usd).toFixed(2);
})
</script>
</body>
</html>
|
| |
|
|
|
|