html - 通过 VBScript 从 IE 表中获取元素
问题描述
我在从网页表中获取我需要的元素时遇到了一些问题。表中的示例代码是:
<tr>
<td colspan="11" class="anscalls">Answered Calls</td>
</tr>
<tr class="daterow">
<td>01/01/2001</td>
<td colspan="10"> </td>
</tr>
<tr class="item">
<td>User 1</td>
<td>#</td>
</tr>
<tr class="daterow">
<td>02/01/2001</td>
<td colspan="10"> </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"> </td>
</tr>
<tr class="item">
<td>User 1</td>
<td>#</td>
</tr>
<tr class="daterow">
<td>04/01/2001</td>
<td colspan="10"> </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"> </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,#
提前致谢。
解决方案
不是 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>
推荐阅读
- go - 去 un/marshal 结构为 json
- flutter - 我如何在网站中实现 Flutter 文件选择器
- c# - 创建 SAML SLO 请求
- java - 如何将二维布尔数组编码为一维数组,然后在java中对其进行解码?
- javascript - Javascript fetch() 如果错误不起作用
- javascript - 运行 useEffect 后变量未重新分配
- c - 循环 fscanf 导致额外的循环(C 语言)
- memory - 试图了解多容器部署的资源和限制使用什么值
- c++ - 使用 `glm::rotate` 和四元数向上旋转 3D 方向向量
- r - 如何识别数据集之间的匹配字符串?