Delphi 如何选择<;选项>;项目由「;“价值”;属性在<;选择>;下拉列表?

Delphi 如何选择<;选项>;项目由「;“价值”;属性在<;选择>;下拉列表?,delphi,dom,twebbrowser,Delphi,Dom,Twebbrowser,在我的Delphi应用程序中,我使用了一个TWebBrowser控件,在这里我加载了一个HTML文档,其中包含一个元素(下拉列表)和一些项(下拉列表项)。比方说,我的web浏览器中加载了以下HTML文档: <html> <body> <select id="ComboBox"> <option value="firstvalue">First Value</option> <option value="seco

在我的Delphi应用程序中,我使用了一个
TWebBrowser
控件,在这里我加载了一个HTML文档,其中包含一个
元素(下拉列表)和一些
项(下拉列表项)。比方说,我的web浏览器中加载了以下HTML文档:

<html>
<body>
  <select id="ComboBox">
    <option value="firstvalue">First Value</option>
    <option value="secondvalue">Second Value</option>
    <option value="thirdvalue">Third Value</option>
  </select>  
</body>
</html>

第一值
第二值
第三值
如何以编程方式选择其
属性为
第三个值
?或者换句话说,当我只知道该项的
属性是
第三个值
,如何通过编程选择该下拉列表中的第三个项?

例如,您可以使用该接口及其属性。作为展示,我做了以下功能

选择Option ByValue函数 以下函数尝试在指定的
元素(下拉列表)中查找并选择给定
值的
属性值的
(下拉列表项)。如果未找到
,则清除当前下拉列表选择(未选择任何项目)

参数:

  • ADocument-输入HTML文档的接口
  • AElementID—元素的ID(下拉列表的元素ID)
  • AOOptionValue-搜索的
    元素值(下拉列表项的值)
返回值:

如果成功找到(并选择)具有给定
值的
,则返回值是指定下拉列表中该选项的索引,否则为-1

源代码:

用法示例:

要从问题的HTML文档中选择下拉列表中具有
thirdvalue
值的项目,可以使用此代码(假设此处
WebBrowser1
组件中加载了该文档):

procedure TForm1.按钮1点击(发送方:TObject);
变量
索引:整数;
开始
索引:=SelectOptionByValue(WebBrowser1.Document,'ComboBox','thirdvalue');
如果索引为-1,则
ShowMessage('在索引上找到并选择了选项:'+IntToStr(索引))
其他的
ShowMessage('未找到选项或函数失败(可能是由于'+
“输入文档无效)!”);
结束;
问题中的HTML文档示例:

<html>
<body>
  <select id="ComboBox">
    <option value="firstvalue">First Value</option>
    <option value="secondvalue">Second Value</option>
    <option value="thirdvalue">Third Value</option>
  </select>  
</body>
</html>

第一值
第二值
第三值

[+1]因为您包含了
if Supports
,HTMLElement可能不是
IHTMLSelectElement
,所以我会使用:
if Supports(HTMLDocument.getElementById('ComboBox'),IID_IHTMLSelectElement,HTMLElement),然后…
。就我的2美分;)@kobik,有趣的是,我还没有收到关于这条评论的通知(即使我是帖子的所有者)。当然,那会更好!
procedure TForm1.Button1Click(Sender: TObject);
var
  Index: Integer;
begin
  Index := SelectOptionByValue(WebBrowser1.Document, 'ComboBox', 'thirdvalue');

  if Index <> -1 then
    ShowMessage('Option was found and selected on index: ' + IntToStr(Index))
  else
    ShowMessage('Option was not found or the function failed (probably due to ' +
      'invalid input document)!');
end;
<html>
<body>
  <select id="ComboBox">
    <option value="firstvalue">First Value</option>
    <option value="secondvalue">Second Value</option>
    <option value="thirdvalue">Third Value</option>
  </select>  
</body>
</html>