почему getElementByID ничего не возвращает вместо NULL

В VBA, если я использую getElementByID ("id_name"), а идентификатор не существует, функция не возвращает ничего, кроме нуля. Это оставляет меня не знающим, должен ли DOM еще отобразить элемент или элемент действительно не существует. Похоже, что спецификация требует возврата NULL, а NULL не равно ничего. Итак, мой вопрос: возвращает ли эта функция DOM NULL, ничего или это зависит от чего-то, что мне не хватает? Спасибо

снипит

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

person tauneutrino    schedule 04.11.2014    source источник


Ответы (2)


В документации MSDN для getElementById говорится что возвращаемое значение метода имеет тип IHTMLElement. Это будет тип Object в VBA. Далее в документации говорится, что метод

Возвращает первый объект с указанным идентификатором или null, если совпадений нет.

Я предполагаю, что это потому, что в VBA Objects не может содержать Null, поэтому Null интерпретируется как Nothing.

я бы попробовал поменять

If Not IsNull(p_IE.Document.getElementById(MAIN_SR_CONTAINER)) Then

to

If Not (p_IE.Document.getElementById(MAIN_SR_CONTAINER) Is Nothing Then
person Steve S    schedule 05.11.2014

Все было в порядке. Вам просто нужно было поместить имя идентификатора в кавычки

So

If Not IsNull(p_IE.Document.getElementById("MAIN_SR_CONTAINER")) Then

Попытайся.

person Sebastian C    schedule 30.07.2021