如何在XMLHttpRequested字符串上使用getElementByClassName?

时间:2018-08-11 07:11:25

标签: javascript

function getNotRec(articleLink) {
  var req = new XMLHttpRequest();
  req.open("GET", articleLink, true);
  req.onreadystatechange = function(aEvt) {
    if (req.readyState === 4) {
      if (req.status === 200) {
        //console.log(req.responseText);
        findNotRecTag(req.responseText);
      }
      else {
        console.log("Error loading page\n");
      }
    }
  };
  req.send(null);
}

function findNotRecTag(htmlText) {
  var notRec = htmlText.getElementsByClassName("t_black");    //here
  for (var i = 0; i < notRec.length; i++) {
    console.log("notrec" + notRec[i].innerText);
  }
}

我希望使用JavaScript在另一个网站上获得一些“课堂”。 所以我正在使用XMLHttpRequest并成功接收。

但是当我尝试从收到的内容中提取某些类时,在控制台上出现错误:

"Uncaught TypeError: Cannot read property 'getElementsByClassName' of undefined",    
"Uncaught TypeError: Cannot read property 'querySelector' of undefined"

我认为Chrome知道我在做什么,但她在..我想不是那样

主要问题:有什么方法在字符串上使用getElementsByClassName或类似的东西?

我也尝试过querySelector,但是它不起作用(请参阅上面的错误消息)。

1 个答案:

答案 0 :(得分:0)

根据收到的错误消息,

req.responseText显然是undefined。要回答您的核心问题,以下是如何从string中选择元素的方法:

// here's your string
const htmlText = `<div><p class="p">fsdf</p><p class="p">wfdfds<p></div>`

// create an element
const fakeEl = document.createElement('div')
// and put the htmlText as innerHTML on that element
fakeEl.innerHTML = htmlText;

// now you can use all kinds of selector methods on that element
console.log(fakeEl.getElementsByClassName('p'));
console.log(fakeEl.querySelectorAll('.p'));