VBScript:如何动态引用对象?

时间:2011-03-16 04:53:59

标签: vbscript

我有一组对象名称。这些对象是HTML元素。我想循环遍历此数组并动态更改每个对象的属性,而不必编写If ThenSelect Case语句的列表。

我正在查看适用于函数的GetRef(),但似乎不适用于对象。

我习惯使用py 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>

修改

几天后,我找到了一个有效的解决方案。既然没有人回答我的问题,我自己也回答了。但是,我不接受我自己的答案,希望其他人能提供更好的解决方案。

2 个答案:

答案 0 :(得分:1)

我找到了比以前的答案更好的方法。它使用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

使用字典也可以,oracle认证的专业人员是正确的:

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有它的位置,但往往更像是一个黑客。

答案 1 :(得分:0)

我找到了一种方法:

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

对于更复杂的字符串来说,它有点笨拙,但是它有效,而且这是我能找到的唯一有用的东西。