【问题标题】:Dynamically updating a table row in HTA (VBS)动态更新 HTA (VBS) 中的表行
【发布时间】:2015-11-17 19:12:53
【问题描述】:

经过研究,我发现要动态更新 HTA 中的表,我需要添加 tbody 元素。我也可以看到,那么我需要使用appendchild函数将必要的数据/行添加到表中。

我已完成此操作,并尝试使用以下代码循环遍历数组 ArrLogs

Dim i
i = 1
Set table = document.getElementById("maintable") 
Set tbody = document.createElement("tbody") 
table.appendChild(tbody) 
Set trow = document.createElement("tr") 
Set tcol = document.createElement("td") 

ArrLogs = ReadLogs(computerasset.value)

Do Until i = UBound(ArrLogs)
       tcol.innerHTML = ArrLogs(i) 
       trow.appendChild(tcol) 
       tbody.appendChild(trow)
       table.appendChild(tbody)  
       i = i+1
Loop

我遇到的问题是我只看到附加到表中的数组的最后一个值,就好像我错过了保存附加的命令并且它在运行时覆盖了行?

我很清楚这并不整洁,或者是循环数组的正确方法(应该使用for i = 1 to UBound(ArrLogs) 等)——我正在测试不同的做事方式,以防我犯了明显的错误。

【问题讨论】:

    标签: html vba vbscript hta


    【解决方案1】:

    trow.appendChild(tcol) 不会复制 tcol 到行;它会插入一个 reference 到它,这意味着您只有 一个 tcol 可以不断覆盖,例如下面的代码将显示 B 而不是 A

    Set p = document.createElement("p") 
    p.innerHTML = "A"
    document.body.appendChild(p)
    p.innerHTML = "B" 
    

    要解决此问题,请在循环中创建新元素:

    Dim i: i = 0
    
    Set tbody = document.createElement("tbody") 
    
    ArrLogs = ReadLogs(computerasset.value)
    
    for i = lbound(ArrLogs) to ubound(ArrLogs)
        Set trow = document.createElement("tr") 
        Set tcol = document.createElement("td") 
    
        tcol.innerHTML = ArrLogs(i) 
        trow.appendChild(tcol)
        tbody.appendChild(trow)
    Next
    
    document.getElementById("maintable").appendChild(tbody)
    

    【讨论】:

    • 刚刚测试过,这正是我想要的。我现在可以看到我是如何插入一个将被覆盖的引用,但是我不明白为什么我没有将它的 i 副本写入表中?
    猜你喜欢
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2021-05-31
    • 1970-01-01
    相关资源
    最近更新 更多