2012-12-05 93 views
1

我主要是C#,Java,PHP開發人員;關聯數據庫封裝。看似無關緊要,但是這種說法的有效先導,我覺得自己再次變成了15;瞪着這個...令人失望的簡單的JavaScript,似乎並沒有爲我提供任何東西。爲什麼不是這個javascript節點遍歷工作?

我的意圖是遍歷當前文檔中的節點,評估它們的屬性,並在特定節點上執行操作。我的代碼如下(再次......這麼簡單,我覺得自己很笨),但是輸出卻不一致。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
<script type="text/javascript"> 
function TraverseDocument() 
{ 
    var Root = document.documentElement; 

    for(Element in Root.childNodes) 
    { 
     document.writeln(Element); 
    } 
} 
</script> 
</head> 

<body onLoad="javascript: TraverseDocument();"> 
<div id="test" testAttr="testData"> 
</div> 
</body> 
</html> 

現在;考慮到這僅僅是我的第五通(教程,示例,等等),我嘗試了這個代碼的一些排列:

// document.writeln(Element.nodeType); 
// document.writeln(Element.nodeName); 
// document.writeln(Element.nodeValue); 

所有這一切都拿出短;顯示'未定義'。當前代碼(如我的第一個代碼塊所示)輸出以下內容:

0 1 2 length item 

任何人都可以指出我在哪裏出錯嗎?菜鳥問題;但我仍然無法控制住自己的手指。提前致謝。

+1

嘗試使用'的console.log(元)'以確保你正在使用你正在使用的東西。 – Neal

+2

@Neal:對,有些瀏覽器有'Element()'構造函數,所以可能會有一些奇怪的事情發生。我建議使用不同的迭代變量名稱。 – maerics

+0

控制檯輸出相同的信息(如在我的第三個代碼塊中),分隔成新行。沒有太大的改進。 – DigitalJedi805

回答

2

夠簡單,for循環你寫迭代對象的屬性,而不是數組中的項目,你可能想要的東西居然是:

function TraverseDocument() 
{ 
    var Root = document.documentElement; 

    for(var i = 0; i < Root.childNodes.length; i++) 
    { 
     document.writeln(Root.childNodes[i]); 
    } 
} 
+0

大聲笑。 '+ 1''贏得勝利! – Neal

+0

Lol顯然是'foreach'理論的一個很棒的實現。非常感謝@MadSkunk,這對我很有幫助。 – DigitalJedi805