我有一组对象名称。这些对象是HTML元素。我想循环遍历此数组并动态更改每个对象的属性,而不必编写If Then
或Select 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>
修改
几天后,我找到了一个有效的解决方案。既然没有人回答我的问题,我自己也回答了。但是,我不接受我自己的答案,希望其他人能提供更好的解决方案。
答案 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
对于更复杂的字符串来说,它有点笨拙,但是它有效,而且这是我能找到的唯一有用的东西。