1

我有一组要搜索页面的类名。然后我想找到所有这些元素,抓取里面的文本,并将其附加到一个 div 中。

var div = document.createElement('div');
div.innerHTML = 'List of names from this page';
document.body.appendChild(div); 

var classNameArray = ['user', 'username', 'fullname', 'profile-field', 'author', 'screen-name'];

for (var i = 0; i < classNameArray.length; i++) {

  element = classNameArray[i];
  getSuggestedAuthors(element);

  function getSuggestedAuthors(element) {
    var classes = document.getElementsByClassName(element);
    var index;
    for (var index = 0; index < classes.length; index++) {
      var class = classes[index];
      var textInsideClass = class.innerHTML;
      div.appendChild(textInsideClass);
    }
  }
}

当我运行它时,它给了我:

Uncaught NotFoundError: An attempt was made to reference a Node in a context where it does not exist.

我相信问题发生在var textInsideClass = class.innerHTML,因为当我删除它时,它只是抓取所有类并将它们附加到 div 中。但是,我只想在课堂上获取文本。

任何人都知道如何在没有 jQuery的情况下做到这一点?我通过 Google Chrome 的executeScript injection注入了这个 hs 。

非常感谢!

4

2 回答 2

3

我认为您的问题是 appendChild 仅适用于节点。您最好使用类似a.innerHTML += f.innerHTML.

您还应该确保将 getSuggestedAuthors 函数移出循环。它可以正常工作,但最好不要在循环内声明函数。

于 2013-11-12T02:37:24.283 回答
1

如果您只需要支持 chrome,那么 Array.prototype 上所有方便的方法都应该存在:)

var a = document.createElement('div');
a.innerHTML = 'List of names from this page';
document.body.appendChild(a); 

function getSuggestedAuthors(elements) {
  for (var d = 0; d < elements.length; d++) {
    a.appendChild(document.createTextNode(elements[d].innerText));//append loop items text to a
  }
}
['user', 'username', 'fullname', 'profile-field', 'author', 'screen-name'].map(function(cls) {
  return document.getElementsByClassName(cls);
}).forEach(getSuggestedAuthors);
于 2013-11-12T02:33:58.163 回答