2

ルートノードを使用する理由。以下の関数では、ルートノード関数を使用しています。この関数についても、「!rootNode」の意味を理解したいと思います。

 function getElementsByClassName(cn, rootNode) {
  if (!rootNode) {
    rootNode = document;
  } 
  for (var r=[], e=rootNode.getElementsByTagName('*'), i=e.length; i--;) {
    if ((' '+e[i].className+' ').indexOf(' '+cn+' ')>-1) {
      r.push(e[i]); 
    }
  }
  return r;  
}
4

3 に答える 3

2

あなたの例では、は、クラス名を持つ要素の階層DOMツリー(JavaScriptでWebページがどのように表されるか)のrootNode再帰的な検索を開始するHTML要素です。cn

これにより、関数の呼び出し元は、クラス名を持つ要素を検索する場所を指定できますcn。呼び出し元が関数を指定しない場合はrootNode、Webページ全体のすべての要素をクラス名で返すだけcnです。

配列r=[]は空の配列として初期化され、そこに見つかった要素が追加されます(を使用してpush)。

i--forループが開始するために使用されます-関数は、配列の最後から最初にi=e.length返される要素を通過します。ループは、の結果をブール値として評価し、getElementsByTagNameヒットすると終了します(この反復では、値をpost- decredesするため、ブール値の評価がfalueに対して実行されるため)。fori--i-10i-- i

于 2012-08-03T07:51:08.737 に答える
1

rootNodeその関数には、要素を検索する最上位ノードがあります。 documentドキュメント全体を調べます。 document.bodyドキュメントの本文のみを参照します。体の他の要素は、その要素の子だけに見えます。

ステートメント:

if (!rootNode) {

は、そのパラメータに何かを渡したかどうかを確認し、渡さなかったか、渡したundefinednull、またはその他の誤った値であるかどうかを確認します。デフォルトでは、ルートノードとしてドキュメントが使用されます。これにより、次のような機能を使用できます。

var items = getElementsByClassName("foo");

関数はドキュメント全体を調べます。

于 2012-08-03T07:50:43.793 に答える
1

rootNodeをパラメーターとして指定しない場合、ドキュメント全体が検索されます。それ以外の場合は、指定されたルートノードからのすべての降順ノードが検索されます。

于 2012-08-03T07:51:43.310 に答える