2

このコードが何をしているのか理解できません。ここにあります:

function parent(e, n) { 

    if (n === undefined) n = 1; //if n is not defined, use 1 by default

    while(n-- && e) e = e.parentNode; 

    if (!e || e.nodeType !== 1) return null; 

    return e;   

}

この関数は 2 つの引数を受け入れます。1 つは要素用で、2 つ目は要素の祖先用です。したがって、2 番目の引数に 2 を渡すと、要素の祖父母 (DOM ツリーの 2 つ上の要素) が取得されます。

whileループを除いて、すべて理解しています。逆算がどのようにその特定の先祖を選択しているのかわかりません。このwhileループはどのように機能し、この関数は先祖を選択しますか??

4

4 に答える 4

2

ここで重要な点は、数値が「真実」(または偽) であるということです。 0と同じように動作しfalseます。したがって、nゼロになるとループは終了します。

したがって、n2 で開始する場合、ループは最大で 2 回実行されます。

もう 1 つの状態は、もう少しわかりやすいものです。ノードに親がない場合、ループも終了します。

ループの反復ごとに が実行されe = e.parentNode、「現在の」ノードの親が取得されます。ループが 2 回の繰り返しを実行すると、DOM の 2 つのレイヤー (「祖父母」) が移動します。

于 2013-01-08T03:38:01.243 に答える
0

これを試して:

var n = 2;
while(n--) console.log("do this " + n + " more times.");

if(0){
  console.log("never executed because zero is evaluated as false");
}

console.log をサポートするブラウザーで。

数字の 0 は false と評価されることを述べる前に、回答が与えられました。

n-- は、n の値を返し、1 を減算することを意味します。上記のコードに --n がある場合は、1 回だけ実行します (最初に減算します)。

コードで n が 2 の場合、ループは 2 回実行され、ループ変数 e (要素) は要素の親ノードに設定されます。親ノードがない場合、 e は未定義になります。その場合、未定義の値を評価すると false になるため、ステートメント if(e){...} は何もしません。したがって、 n && e は、e が未定義の場合 (親ノードがない場合など)、n が 0 でなくても false を返します。

于 2013-01-08T03:47:23.133 に答える
0

ループの各反復は、渡された要素のparentNodeを調べます。したがって、反復係数として 1 を指定して特定の div を渡すと、div の直接の親が参照されます。2 を渡すと、2 つの親 (div の親の親) が検索されます。これは、e.parentNode を使用し、ループの反復ごとに e をその親にリセットすることによって行われます。

于 2013-01-08T03:43:21.090 に答える
0

n番目の親要素を取得するように見えます...

于 2013-01-08T03:39:05.160 に答える