2009-09-30 142 views
4

那么,它的工作原理,它只是不产生任何有价值的:does not document.getElementsByTagName work in vbscript?

elems = document.getElementById("itemsTable").getElementsByTagName("TR") 
for j = 0 to ubound(elems) - 1  
    ' stuff 
next 

好了,这是行不通的,显然elems的是一个对象,而不是一个数组像你在看中的JavaScript得到。尽管如此,我仍然坚持使用VBScript。

那么我该如何迭代vbscript中的表中的所有行?

编辑:是的,它是VBScript,它很烂。我在这里没有选择,所以不要说“使用jQuery !!”。

+0

只是出于好奇,为什么使用VBScript? – Anax 2009-09-30 22:19:52

+0

因为这是我老板告诉我使用的。 – jcollum 2009-09-30 22:20:40

+0

其实你没有在Javascript中获得数组 - 你得到一个NodeList。这有点不同。 – Greg 2009-09-30 22:21:04

回答

7

正如你已经正确地指出getElementsByTagName不返回数组,因此UBound()不会进行这项工作。把它当作一个集合。

换Eaching通过它应该工作:

Set NodeList = document.getElementById("itemsTable").getElementsByTagName("TR") 
For Each Elem In NodeList 
    ' stuff 
    MsgBox Elem.innerHTML 
Next 
+0

非常好,谢谢。我从来没有弄清楚为什么你必须有时间设置事物,而其他人则不需要。 – jcollum 2009-09-30 22:35:12

+0

如果我可以的话,我会给你一个奖励,让你得到更多的答复。回答关于SO的vbscript问题是一个不尽人意的工作。 – jcollum 2009-09-30 22:36:37

+0

哈哈,很酷。顺便检查一下你的问题关于设置:http://www.empinstitute.org/caspdoc/html/vbscript_set_statement.htm – 2009-09-30 22:38:36

0

elems不是JavaScript中的数组,it is a NodeList,它恰好与JavaScript Array对象共享一些属性。

我不知道VB,但我相信你可以做:

for j = 0 to elems.length - 1  
    ' stuff 
next 
+0

请注意,我说“显然elem是一个对象”。对象类型没有长度。 – jcollum 2009-09-30 22:26:32

+0

哇。听起来像VB有一个错误的DOM实现。 – Quentin 2009-09-30 23:08:17

1

如果你有IE8 +,你可以使用"item" method。所以它会是:

Dim elem: Set elem = document.getElementById("itemsTable").getElementsByTagName("TR").item(1);