在我的Delphi应用程序中,我使用TWebBrowser
控件,我在其中加载了一个HTML文档,其中包含<select>
个元素(下拉列表),其中包含一些<option>
个项目(下拉列表项)。假设我在网络浏览器中加载了以下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>
,其value
属性为thirdvalue
?或者换句话说,当我只知道此项value
属性为thirdvalue
时,我如何以编程方式选择此下拉列表中的第三项?
答案 0 :(得分:10)
例如,您可以将IHTMLSelectElement
接口与其selectedIndex
属性一起使用。作为展示,我做了以下功能。
以下函数尝试查找并选择(如果找到)指定<option>
元素中给定value
属性值的<select>
(下拉列表项)(drop)下面的清单)。如果未找到<option>
,则清除当前下拉列表选择(未选择任何项目)。
<强> 参数:的强>
<select>
元素的ID(下拉列表的元素ID)<option>
元素值(下拉列表项的值)返回值:
如果成功找到(并选择)具有给定<option>
的{{1}},则返回值是指定下拉列表中该选项的索引,否则为-1。
源代码:
value
示例用法:
要从HTML文档的下拉列表中选择具有function SelectOptionByValue(const ADocument: IDispatch; const AElementID,
AOptionValue: WideString): Integer;
var
HTMLDocument: IHTMLDocument3;
HTMLElement: IHTMLSelectElement;
function IndexOfValue(const AHTMLElement: IHTMLSelectElement;
const AValue: WideString): Integer;
var
I: Integer;
begin
Result := -1;
for I := 0 to AHTMLElement.length - 1 do
if (AHTMLElement.item(I, I) as IHTMLOptionElement).value = AValue then
begin
Result := I;
Break;
end;
end;
begin
Result := -1;
if Supports(ADocument, IID_IHTMLDocument3, HTMLDocument) then
begin
if Supports(HTMLDocument.getElementById(AElementID), IID_IHTMLSelectElement,
HTMLElement) then
begin
Result := IndexOfValue(HTMLElement, AOptionValue);
HTMLElement.selectedIndex := Result;
end;
end;
end;
值的项目,可以使用此代码(假设在此thirdvalue
组件中加载了该文档):
WebBrowser1
来自问题的示例HTML文档:
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;