3

私は JavaScript の初心者です。jsでDOMを操作する方法を理解しようとしています...

構造がどれほど複雑であっても、すべての DIV から、いくつかの Web サイトからテキストを取得したいと考えています。以下のコードを実行すると、テキストが表示されますが、パターン div は彼のテキストと子 div からのテキストを提供します...次に、子 div は彼のテキストを提供します...したがって、多くの繰り返しテキストを取得します。

var items = document.body.getElementsByTagName('*');
for(var i=0; i<items.length; i++)
{
  document.write(items[i].textContent);
}

現在のテキストのノードを知ることは私にとって重要です。したがって、テキストを取得してもテキストのノードがわからないため、これを使用できません。

var body = document.body, textContent = 'textContent' in body ? body.textContent : body.innerText;
document.write(textContent);

解像度がjQueryであることは知っていますが、JSでこれを行う方法を理解しようとしています。

4

2 に答える 2

0

jQuery .get()関数を使用して、一致するすべての要素を取得してみることができます。

例:

var elements = [];
elements = $('div').get();

すべての要素を取得したら、各要素からテキストがあればそれを取得して、次のように別の配列に格納できます。

var textStrings = [];
var len = elements.length;
for(var a = 0; a < len; a++)
    textStrings[a] = elements[a].text();

2番目のコードブロックは、要素の最初の配列を実行し、各要素からテキストをプルして、textStringsと呼ばれる2番目の配列に保存します。'len'変数は、JavaScriptコードを最適化し、ブラウザーがループを通過するたびに'elements.length'を評価しないようにするために使用されます。

お役に立てれば。

于 2012-10-12T18:09:26.147 に答える
0

には子ノードの HTML が含まれているため、この状況では通常のtextContentorinnerHTMLアプローチは失敗します。.innerHTML

しかし、使用できる別のプロパティがあります: childNodes. このリストには、子要素だけでなく、テキスト ノードを含むすべての子ノードが含まれます。

var items = document.body.getElementsByTagName('*');
for(var i=0; i<items.length; i++)
{
  var currItem = items[i];
  for(var j = 0; j < currItem.childNodes.length; ++j)
  {
    if(currItem.childNodes[j].nodeName === "#text")
    {
      // the current child node is a text node
      document.write(items[i].textContent);
    }
  }
}

すべてのノードは DOM 内で固有の位置にあるため、これにより、すべてのノードが 1 回だけ書き込まれることが保証されます。

参考文献:

于 2012-10-12T18:13:36.687 に答える