鑑於此HTML:
<html>
<body>
<div>
<div>
hello
<div>welcome</div>
hai
</div>
123
</div>
<p>noli me tangere</p>
</body>
</html>
在奧多姆和調用此子
Sub traverseDom00(ndX, nInd)
WScript.Echo Space(nInd), ndX.nodeName
If ndX.hasChildNodes Then
Dim ndY
For Each ndY In ndX.childNodes
traverseDom00 ndY, nInd + 1
Next
End If
WScript.Echo Space(nInd), "/" & ndX.nodeName
End Sub
通過traverseDom00 oDOM, 0
結果
#document
HTML
HEAD
TITLE
/TITLE
/HEAD
BODY
DIV
DIV
#text
/#text
DIV
#text
/#text
/DIV
#text
/#text
/DIV
#text
/#text
/DIV
P
#text
/#text
/P
/BODY
/HTML
/#document
此子顯示了遞歸DOM遍歷的基本結構。如果你比較這對你的函數(爲什麼功能?),你會看到
- 你錯過下一個
- 你前檢查具有的childNodes 你循環
基於遍歷代碼結構,很容易拿出
Sub traverseDom01(ndX, aRes)
If ndX.hasChildNodes Then
Dim ndY
For Each ndY In ndX.childNodes
traverseDom01 ndY, aRes
Next
End If
If "#text" = ndX.nodeName Then
If "DIV" = ndX.parentNode.nodeName Then
ReDim Preserve aRes(UBound(aRes) + 1)
aRes(UBound(aRes)) = Trim(ndX.nodeValue)
End If
End If
End Sub
收集是一個DIV的孩子的文本。經由
Dim aDTs : aDTs = Array()
traverseDom01 oDOM, aDTs
WScript.Echo "|" & Join(aDTs, "|") & "|"
稱爲結果是
|hello|welcome|hai|123|