Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.10.2017, 14:57
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,748

Bookmarklet для сайта ЦБ РФ
Нужно было реализовать букмарклет, который алертил бы стоимости килограмма золота в USD с точностью до сотых.
Я реализовал этот так:
javascript: (function() {
    if (location.href.split('://').pop().replace('/', '') != 'www.cbr.ru') return !1;
    var f = function(c) {
            return {
                ',': '.'
            }[c] || '';
        },
        e = /\D+?/g,
        p = $('#widget_metal .content table tr:eq(1) td:eq(1)').text().replace(e, f) * 1e3,
        r = {
            t: [],
            d: []
        };
    $('#widget_exchange .content table tr:lt(2)').each(function(i) {
        r[i ? 'd' : 't'] = $.makeArray($(this).find('>*:gt(0)').map(function() {
            return $(this).text().replace(e, f);
        }));
    });
    alert(r.t.map(function(s, i) {
        return s.replace(/(\d{2})(\d{2})(\d+)/, '$1.$2.$3: ') + (p / r.d[i]).toFixed(2);
    }).join('\n'));
})();

Можно ли получить более короткое решение?
Ответить с цитированием
  #2 (permalink)  
Старый 25.10.2017, 15:48
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,007

не проверял
javascript: (function() {
    var f = e => $(e).text().replace(/,/g,'.').replace(/[^\d\.]/g,''),
    p = f($('#widget_metal .content table tr:eq(1) td:eq(1)')) * 1e3,
    r = {t: [], d: []};
    $('#widget_exchange .content table tr:lt(2)').each((i,e) => {
        r[i ? 'd' : 't'] = [].map.call($(e).find('>*:gt(0)'),f);
    });
    alert(r.t.map((s, i) => s.replace(/(\d\d)(\d\d)(\d+)/, '$1.$2.$3: ') + (p / r.d[i]).toFixed(2)).join('\n'));
})();


твою строку 2 я выкинул, потому что в bookmarklet это нафиг не надо.
Ответить с цитированием
  #3 (permalink)  
Старый 25.10.2017, 16:54
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Nexus,
у ЦБ РФ теперь есть SOAP для получения курсов валют, драгметаллов и прочей информации, это лучше чем парсить текст.
Ответить с цитированием
  #4 (permalink)  
Старый 25.10.2017, 17:09
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,748

laimas, в букмарклете обращаться к серверу ЦБ для получения этих данных?)
Обратиться к элементам страницы и получить нужные данные куда проще и быстрее.

Нужно было просто написать букмарклет, ни больше.
Это было тестовое задание перед собеседованием.
Ответить с цитированием
  #5 (permalink)  
Старый 25.10.2017, 17:21
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,007

курс доллара (строка):
$('#widget_exchange tr:has(ins:contains("$")) .w_data_wrap')[0].lastChild.data


стоимость золота (строка):
$('#widget_metal tr:has(ins:contains("Au")) .w_data_wrap>span').text()
Ответить с цитированием
  #6 (permalink)  
Старый 25.10.2017, 17:25
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,748

Alexandroppolus,
$('#widget_metal .content table tr:eq(1) td:eq(1)')
$('#widget_metal tr:has(ins:contains("Au")) .w_data_wrap>span')
Ответить с цитированием
  #7 (permalink)  
Старый 25.10.2017, 17:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Nexus
в букмарклете обращаться к серверу ЦБ для получения этих данных?
Сообщение от Nexus
'www.cbr.ru'
Это на это.
Ответить с цитированием
  #8 (permalink)  
Старый 25.10.2017, 17:35
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,748

Сообщение от laimas
Это на это.
Можно более развернуто?
Ответить с цитированием
  #9 (permalink)  
Старый 25.10.2017, 17:44
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Nexus
Можно более развернуто?
Я вижу запрос к банку, разбор, вот и написал, что есть SOAP для этого. )
Ответить с цитированием
  #10 (permalink)  
Старый 25.10.2017, 18:05
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,748

laimas, во второй строке была проверка на нахождение пользователя на указанной странице.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как писать, дебажить JS для FireFox bookmarklet DeeZ Оффтопик 2 01.10.2017 20:37
CMS или Framework для сайта xShift Серверные языки и технологии 3 13.01.2017 18:20
background resize IceDvl jQuery 4 25.04.2014 17:54
Разработка виджета для стороннего сайта kdc38 Элементы интерфейса 0 02.08.2013 11:08
Как переделать простое меню для сайта на javascript? denspb Работа 2 16.07.2010 01:25