私は以下のアルゴリズムをDOMツリーにDFSしようとしましたが、動作しません! DOMツリーの最初のパスをチェックするだけです。なぜ?!なぜこのDOM DFSアルゴリズムが機能しないのですか?
function DFS(P) // (ScanRegion, Elem, MCF)
{
P.Elem.setAttribute("Checked", "1");
Children = P.Elem.querySelectorAll("*");
for(I = 0, L = Children.length; I < L; I++)
DFS
(
{
ScanRegion : P.ScanRegion,
Elem : Children[I] ,
MCF : P.MCF
}
);
return;
}
DFS
(
{
ScanRegion : document.body,
Elem : document.body,
MCF : "Not important in this question :D"
}
);
デバッグの日後、私は最終的に問題を発見しました。私は以下のコードを試してみましたが、DOMツリーの最初の葉とブラウザがリカーシブ関数の最初の 'return'を実行した後、親関数の 'L'変数はその値を失い、 0 'である。私はそれはあなたが知っているので、子関数の 'L'が '0'(葉に子がないので:D)と親関数に影響すると思うので、JSの可変範囲問題のためだと思います。ここ
は、私が試したデバッグコードです:
function DFS(P) // (ScanRegion, Elem, MCF)
{
P.Elem.setAttribute("Checked", "1");
Children = P.Elem.querySelectorAll("*");
L = Children.length; alert(L); // * New
for(I = 0; I < L; I++)
DFS
(
{
ScanRegion : P.ScanRegion,
Elem : Children[I] ,
MCF : P.MCF
}
);
alert(L); // * New
return;
}
DFS
(
{
ScanRegion : document.body,
Elem : document.body,
MCF : "Not important in this question :D"
}
);
いずれかが問題を知っているか、真のコードを持っている場合、私は感謝される:)
ホールドでは、両方のコードが正しく動作しません。私は、第2のコードではうまくいかないことについてちょっと混乱しています。 – Xufox
2番目はデバッグ用のバージョンであり、さらに2つのアラートしかありません。 – Arvin
とにかくあなたの注意のためにありがとう:) – Arvin