Получить данные из html страницы.
Я получаю страницу через XMLHttpRequest
Это отрывок из неё, т.е. строка, которую мне нужно получить: <font class="playersonline"> <span class="txtdet"> <b> Сейчас в игре 5,822 игрока. </b> </span> </font> Я всё это делаю поиском, копированием, удалением, с кучей переменных... В общем мне этот способ не очень нравится: function authorized() { var xhr = new XMLHttpRequest() // Создать объект xhr.withCredentials = true // Передать куки и параметры авторизации от клиента xhr.onreadystatechange = function() // Назначить обработчик запроса { if(xhr.readyState == 4) // Запрос завершен и ответ готов { if(xhr.status == 200) // Успешный запрос { var html = xhr.responseText // Получить страницу в тексте if(html.indexOf('LOGIN_redirect value') != -1) // Если есть форма авторизации { var s = html.indexOf('Сейчас в игре ') + 14 // Найти начало var e = html.indexOf(' игрок') // Найти конец var n = html.substring(s, e) // Скопировать значение var num = parseInt(n.replace(/,/g, ""), 10) // Удалить запятую из цифр и перевести из текста в число var str = 'Сейчас в игре ' + n + ' игрок' // Формирование новой строки // Правильное окончание начало var v = num % 100 if(v > 10 && v < 20) str += 'ов.' else { v = num % 10 if(v == 1) str += '.' else if(v > 1 && v < 5) str += 'ка.' else str += 'ов.' } // Правильное окончание конец localStorage['player_online'] = str // Записать всю строку в память } } } } xhr.open('GET', 'http://www.site.ru/home.php', true) // Конфигурация запроса xhr.send() // Отправить запрос } Есть же какие - то функции специальные чтобы просто получить значение в тегах? |
Что - нибудь типа:
document.querySelector('font[class="playersonline"]') Только document я так понял означает текущую страницу? А так можно? xhr.querySelector('font[class="playersonline"]') И как потом пропустить это: <span class="txtdet"> и <b> ? .innerHTML - получить то что в тегах. Вот так будет работать, или это чушь? xhr.querySelector('font[class="playersonline"]').querySelector('b').innerHTML Или так: xhr.querySelector('font[class="playersonline"]').getElementsByTagName('b').innerHTML |
Страницы в интернете - просто текст, пока браузер не превратит их в сложную структуру DOM.
XHR как раз и получает этот текст. Вы можете преобразовать вручную его в целиком в DOM, но в вашем случае это бессмысленная трата времени и вычислительных ресурсов: поиск строк стократ быстрее. Это имеет смысл только если вам нужно вытаскивать множество сложноструктурированных данных. |
Спасибо ))
Т.е. лучше так оставить? |
Цитата:
Разве что микрооптимизировать, var e = html.indexOf(' игрок')-> var e = html.indexOf(' игрок', s) //поиск с предыдущей позиции |
Спасибо )
Додумался как проще сделать: location.href = "authorized.html" var s = html.indexOf('Сейчас в игре ') var e = html.indexOf(' игрок', s) + 7 if(html[e] == '.') e += 1 // игрока. else if(html[e + 1] == '.') e += 2 // игроков. localStorage['player_online'] = html.substring(s, e) |
Это не будет работать.
После location.href = "authorized.html"будет переход на другую страницу и весь последующий код исполнен не будет, т.к. останется на предыдущей. |
По-моему не останется. Предыдущая страница разве не умирает? )
|
Цитата:
|
Часовой пояс GMT +3, время: 00:37. |