在VBA中,如果我使用getElementByID(" id_name")并且id不存在,则该函数返回任何内容而不是null。这让我不知道DOM是否还没有渲染元素,或者元素是否真的不存在。似乎规范要求返回NULL并且NULL不等于Nothing。所以我的问题是这个DOM函数是返回NULL,没有,还是依赖于我所遗漏的东西?感谢
snipit
If Not IsNull(p_IE.Document.getElementById(MAIN_SR_CONTAINER)) Then
' If I do not receive NULL I want to assume that I can grab the element.
' Still, I verify that the element is not Nothing
' problem is that NULL <> Nothing so if the element does not exist my code loops for eternity
' I do look at the readystate of the p_IE object and wait till it = 4
' But the elements may be being created by embedded javascript on the fly
Set elMainSRContainer = p_IE.Document.getElementById(MAIN_SR_CONTAINER)
Do While elMainSRContainer Is Nothing
Set elMainSRContainer = p_IE.Document.getElementById(MAIN_SR_CONTAINER)
Loop
:
:
Else
' bail
End If
答案 0 :(得分:1)
MSDN documentation for getElementById表示方法返回值是IHTMLElement类型。这将是VBA中的Object
类型。文档继续说明方法
返回具有指定ID的第一个对象,如果没有匹配则返回null。
我的猜测是因为,在VBA中,Objects
无法保留Null
,因此Null
被解释为Nothing
。
我会尝试更改
If Not IsNull(p_IE.Document.getElementById(MAIN_SR_CONTAINER)) Then
到
If Not (p_IE.Document.getElementById(MAIN_SR_CONTAINER) Is Nothing Then
答案 1 :(得分:0)
一切正常。您只需要将 ID 名称放在引号 ""
中所以
If Not IsNull(p_IE.Document.getElementById("MAIN_SR_CONTAINER")) Then
试试吧。