最近,我发布了一个问题vbscript 捕获 HTML 选择选项标记中的文本。这对我在 Internet Explorer 平台上的帮助很大。但是,我有一个新项目,其网站稍微复杂一些。该网站有多个嵌套表格,这些表格的格式可容纳form
元素。我和我的团队已经弄清楚如何在大多数元素中获取和设置数据,除了下拉框(select
标签)。我们可以从下拉列表中获取文本,但无法更改该值。相反,所有选项都被清除,整个下拉列表为空白。
这是网站代码的修订版本,因为涉及更多代码,但仅显示相关代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>...</head>
<body>
<form id="form1" action="AssignOFS.aspx" method="post">
<div class="aspNetHidden">...</div>
<div class="aspNetHidden">...</div>
<table width="100%" align="center" cellspacing="0">
<tbody>
<tr>
<td>
<table width="100%" align="center" cellspacing="0">...</table>
</td>
</tr>
<tr>
<td>
<table width="100%" align="center" cellspacing="0">
<tbody>
<tr>...</tr>
<tr>...</tr>
<tr class="tr_data">...</tr>
<tr>
<td align="center">
<div id="pnlBtn1">...</div>
<div id="pnlView">
<table width="100%" align="center" cellspacing="0">
<tbody>
<tr>...</tr>
<tr>...</tr>
<tr class="tr_data">
<td align="center">...</td>
<td valign="top">...</td>
<td valign="top">...</td>
<td valign="top">...</td>
<td nowrap="" valign="top">...</td>
<td align="left">...</td>
<td align="center">...</td>
<td align="center">
<select name="user" class="txt_input1" id="user" onchange="javascript:addUser(227);">
<option value="">--Select User--</option>
<option value="0123">Amy Jones (000456321)</option>
<option value="0432">Brian Wyatt (000745632)</option>
<option value="0345">Carl Lister (000874563)</option>
<option value="0654">Daniel Michaels (000987456)</option>
<option value="0567">Elizabeth Sweeny (001456321)</option>
<option value="0876">Fran Tarris (001745632)</option>
<option value="0789">Gail McMurphy (001874563)</option>
<option value="1098">Hannah Barisce (001987456)</option>
</select>
</td>
</tr>
</tbody>
</table
</div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
为了能够从下拉列表中获取文本,我们使用了class
name txt_input1
在表中找到保存下拉列表的节点后。此代码将为我们提供下拉列表中的整个列表:
objIE.Document.getElementsByTagName("table")(0).getElementsByTagName("td").Item(64).GetElementsByClassName("txt_input1")(0).innerText
我尝试过改变的值select
使用以下代码从“--选择用户--”下拉到列表中的名称之一:
objIE.Document.getElementsByTagName("table")(0).getElementsByTagName("td").Item(64).GetElementsByClassName("txt_input1")(0).innerText = "Carl Lister"
这导致了空白下拉。如果我把结局改成.Value
,它只会删除显示的“--Select User--”。它仍然不会将值更改为“Carl Lister”。在选择时我们是否遗漏了一些东西option
in a select
在嵌套表中下拉?
For a select
元素,更改显示值的最佳方法是“选择”其中之一option
属于菜单一部分的元素。为此,您可以像这样更改代码:
objIE.Document.getElementsByTagName("table")(0).getElementsByTagName("td").Item(64).GetElementsByClassName("txt_input1")(0).childNodes(x).selected = true
上面的代码将选择子节点(option
元素)位于索引处x
并以编程方式选择它,以便该值将显示在select
元素。选项的索引从 0 开始,因此对于x = 0
这将选择第一个选项(在本例中,Amy Jones
).
您还可以将上面的代码简化为:
objIE.Document.getElementsByClassName("txt_input1")(0).childNodes(x).selected = true
或者你甚至可以这样做id
因为您已经为菜单分配了一个 ID:
objIE.Document.getElementById("user").childNodes(x).selected = true
如果您想从下拉列表中选择员工姓名,您可以循环遍历现有选项并找到正确的选项,如下所示(代码改编自 VBA 代码)这个问题):
Dim el As IXMLDOMNode
Dim childNode As IXMLDOMNode
el = objIE.Document.getElementById("user")
For Each childNode in el.ChildNodes
If InStr(childNode.innerText, emplName) Then
childNode.selected = true
Exit For
End If
Next childNode
在这个例子中,emplName
是您要选择的员工。
(我的 VBA 有点生疏,所以如果有任何语法错误,我深表歉意。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)