为什么getElementByID返回Nothing而不是NULL

时间:2014-11-04 22:15:46

标签: vba internet-explorer null getelementbyid nothing

在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

2 个答案:

答案 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

试试吧。