我嘗試下面的算法到DFS的DOM樹,但它不工作!它可以檢查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樹的第一個葉子後,瀏覽器運行遞歸函數的第一個「返回」後,父函數的「L」變量將丟失其值並更改爲「 0' 。我猜這是因爲JS中的變量範圍問題,因爲如你所知,子函數的'L'是'0'(因爲葉子沒有孩子:D),我認爲它會影響父函數。
這裏的調試代碼我想:
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"
}
);
如果任何人知道的問題還是有真正的代碼:)
堅持,兩個代碼都不起作用,對吧?我對第二個代碼中不起作用有些困惑。 – Xufox
第二個只是一個調試版本,只有兩個警報。 – Arvin
無論如何感謝您的關注:) – Arvin