Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Нужна помощь с DOMParser (или с XMLHttpRequest). (https://javascript.ru/forum/misc/68165-nuzhna-pomoshh-s-domparser-ili-s-xmlhttprequest.html)

Fortun 29.03.2017 18:40

Нужна помощь с DOMParser (или с XMLHttpRequest).
 
Здравствуйте.
Сразу скажу, что прежде чем написать сюда некоторое время гуглил, но ничего толкового не нашел.
Мой вопрос заключается в следующем. Есть у меня определенная страница, с которой я хочу получить все элементы с определенным классом. Вот к какому коду я пришел:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://site.ru', false);
xhr.send();
var parser=new DOMParser();
var xmlDoc=parser.parseFromString(xhr.response,"text/xml");
var tds = xmlDoc.getElementsByClassName("mar_t");
console.log(tds);


Но в результате выдается пустой ответ.

Если после xhr.send(); я делаю console.log(xhr.response);, то мне выдается абсолютно весь код запрашиваемой страницы, но мне нужен просто список объектов с указанным классом.
Что я делаю не так?

laimas 29.03.2017 18:43

var tds = document.querySelectorAll(".mar_t")

Diphenyl Oxalate 29.03.2017 19:36

Если классы добавляются скриптом, то найти элементы по классу не получится

SV0L0CH 30.03.2017 04:24

А если применить XPath?
var XPIter = document.evaluate("//*:*[contains(' '+@class+' ', ' mar_t ']");
var tds=[];
var next;
while((next = XPIter.iterateNext())!=null)
  tds.push(next);

Так же надо убедиться что документ действительно корректно распарсился как XML.

Fortun 30.03.2017 14:50

Нашел решение. На него меня навела фраза о том, что классы добавляются скриптом. То есть страница не полноценная и надо сделать ее полноценным HTML.

Вот мое решение:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://site.ru', false);
xhr.send();
var tempElement = document.createElement('div');
tempElement.innerHTML = xhr.responseText;
var message = tempElement.querySelectorAll('a.mar__t');
for (i = 0; i < message.length; i++) { 
    console.log(message[i]);
}


createElement('div'); нужен для того, чтобы обозначить абстрактную позицию полученного кода на странице, конкретизировать его место на странице я не стал, т.к. мне не нужно фактически размещать полученное на странице где выполняется скрипт.
Чем можно заменить этот момент я не придумал :) (хотя и сам считаю что это какой то говнокод).

GayCoder 30.03.2017 16:38

vanished

GayCoder 30.03.2017 16:39

vanished


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