VBScript: Как я могу динамически ссылаться на объект? - PullRequest
0 голосов
/ 16 марта 2011

У меня есть массив имен объектов. Эти объекты являются элементами HTML. Я хочу перебрать этот массив и динамически изменять свойства каждого объекта, а не писать список операторов If Then или Select Case.

Я смотрю на GetRef(), который будет работать для функций, но, похоже, не работает для объектов.

Я привык к Python, где я могу использовать getattr(). Переменные PHP также работают в крайнем случае. Есть ли эквивалент в VBScript?

Вот что я хотел бы сделать (я знаю, что все до того, как комментарий сработает - это бит после комментария, с которым мне нужна помощь):

<table id="softwareStatus">
    <tr>
        <td><span id="statusProg1">prog1</span></td>
        <td><span id="statusProg2">prog2</span></td>
        <td><span id="statusProg3">prog3</span></td>
    </tr>
</table>

<script language="VBScript">
    Dim softwarelist(2,2)
    softwarelist(0,0) = "prog1"
        softwarelist(0,1) = "statusProg1"
    softwarelist(1,0) = "prog2"
        softwarelist(1,1) = "statusProg2"
    softwarelist(2,0) = "prog3"
        softwarelist(2,1) = "statusProg3"


    For x = 0 To 2
        if IsInstalled(softwarelist(x,0)) Then
            ' I want to change the object's attributes
            ' by referring to it dynamically:
            softwarelist(x,1).InnerHTML = "<strong>" &_
              softwarelist(x,0) & "</strong><br />Installed"
            softwarelist(x,1).style.backgroundcolor = "white"
        Else
            softwarelist(x,1).InnerHTML = "<strong>" &_
              softwarelist(x,0) & "</strong><br />Not Installed"
            softwarelist(x,1).style.backgroundcolor = "red"
        End If

    Next
</script>

Edit:

Через несколько дней я нашел решение, которое работает. Поскольку никто еще не ответил на мой вопрос, я сам ответил на него. Однако я не принял свой собственный ответ в надежде, что кто-то другой предложит лучшее решение.

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Я нашел лучший способ, чем мой предыдущий ответ.Он использует метод DOM:

softwarelist = Array("prog1", "prog2", "prog3")

For Each prog in softwarelist
    If IsInstalled(prog) Then
        Set objItem = Document.GetElementByID("status" & prog)
        objItem.InnerHTML = "Text here"
    End If
Next

Использование словаря также подойдет, сертифицированный оракул был прав:

Set dSW = CreateObject("Scripting.Dictionary")
With dSW
    .Add "prog1", "divprog1"
    .Add "prog2", "spanprog2"
    .Add "prog3", "uniqueID3"
End With

For Each prog in dSW
    If IsInstalled(prog) Then
        Set objItem = Document.GetElementByID(dSW.Item(prog))
        objItem.InnerHTML = "Text here"
    End If
Next

Оба эти метода работают хорошо, понятнее и болееинтуитивно понятный, обеспечивает большую гибкость и возможность большей настройки.Я думаю, что они также лучше используют встроенную функциональность как VBScript, так и HTML.Execute имеет свое место, но имеет тенденцию быть более взломанным.

0 голосов
/ 20 марта 2011

Я нашел способ:

For x = 0 To 2
    if IsInstalled(softwarelist(x,0)) Then
        Execute softwarelist(x,1) & ".InnerHTML = ""Text here"""       
    End If
Next

Это немного громоздко с более сложными строками, но это работает, и это единственное, что я могу найти, что работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...