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 インジェクションを通じて注入されます。

本当にありがとう!

4

2 に答える 2

3

あなたの問題は、 appendChild がノードでのみ機能することだと思います。の行に沿って何かを使用して、innerHTML に追加するだけの方がよい場合がありますa.innerHTML += f.innerHTML

また、getSuggestedAuthors 関数をループの外に移動する必要があります。このままでも問題なく動作しますが、ループ内で関数を宣言しない方がはるかに優れています。

于 2013-11-12T02:37:24.283 に答える
1

クロムのみをサポートする必要がある場合は、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 に答える