首页 > 解决方案 > 通过 VBScript 从 IE 表中获取元素

问题描述

我在从网页表中获取我需要的元素时遇到了一些问题。表中的示例代码是:

<tr>
    <td colspan="11" class="anscalls">Answered Calls</td>
</tr>
<tr class="daterow">
    <td>01/01/2001</td>
    <td colspan="10">&nbsp;</td>
</tr>
<tr class="item">
    <td>User 1</td>
    <td>#</td>
</tr>
<tr class="daterow">
    <td>02/01/2001</td>
    <td colspan="10">&nbsp;</td>
</tr>
<tr class="changeditem">
    <td>User 1</td>
    <td>#</td>
</tr>
<tr class="changeditem">
    <td>User 2</td>
    <td>#</td>
</tr>
<tr class="daterow">
    <td>03/01/2001</td>
    <td colspan="10">&nbsp;</td>
</tr>
<tr class="item">
    <td>User 1</td>
    <td>#</td>
</tr>
<tr class="daterow">
    <td>04/01/2001</td>
    <td colspan="10">&nbsp;</td>
</tr>
<tr class="changeditem">
    <td>User 1</td>
    <td>#</td>
</tr>
<tr class="changeditem">
    <td>User 2</td>
    <td>#</td>
</tr>
<tr class="changeditem">
    <td>User 3</td>
    <td>#</td>
</tr>
<tr class="daterow">
    <td>05/01/2001</td>
    <td colspan="10">&nbsp;</td>
</tr>
<tr class="item">
    <td>User 1</td>
    <td>#</td>
</tr>

我能够获取“changeeditem”类之间的信息,这是我需要的,但我还需要“daterow”类中的信息与“changeeditem”信息一起使用。我目前正在使用以下代码:

For j = 0 To (.Document.getElementsByClassName("changeditem").Length - 1)
    MsgBox .Document.getElementsByClassName("changeditem").Item((j + 0)).InnerText & Chr(44) & _
           .Document.getElementsByClassName("changeditem").Item((j + 1)).InnerText
    j = j + 1
Next

哪些输出:

User1,#
User2,#
User1,#
User2,#
User3,#

我需要遍历整个表,这比显示的要大得多,并获得与“changeeditem”类相关的“daterow”类,我不知道该怎么做。

我的目标是:

02/01/2001,User 1,#
02/01/2001,User 2,#
04/01/2001,User 1,#
04/01/2001,User 2,#
04/01/2001,User 3,#

提前致谢。

标签: htmlvbscript

解决方案


不是 VBScript 的答案,但jQuery专门用于这种 DOM 操作并且使用非常广泛,所以无论如何我都会建议它。使用 jQuery,您可以执行以下操作。我绝不会流利地使用 jQuery,这不会输出所需的确切输出,但它说明了这个想法。您可以使用标准的 DOM 方法来完成所有这些工作,而 jQuery 只是让它变得更容易。

<script>
$(function() {
    // get a reference to all changeditem rows
    var $changedItem = $('tr.changeditem');
    // loop the results
    $changedItem.each(function() {
    // contents of first td in tr
    console.log( $(this).children('td').first().text());
    // if there is a sibling tr daterow, get a reference
    var $dateRow = $(this).next('tr.daterow');
    // contents of first td in tr
    console.log( $dateRow.children('td').first().text());
    });
});
</script>

推荐阅读