You can use the IHTMLSelectElement
interface with its selectedIndex
property for instance. As a showcase I've made the following function.
SelectOptionByValue function
The following function tries to find, and select (if found) an <option>
(a drop down list item) of a given value
attribute value in a specified <select>
element (drop down list). If no <option>
is found, the current drop down list selection is cleared (no item is selected).
Parameters:
- ADocument - the interface to an input HTML document
- AElementID - ID of a
<select>
element (element ID of a drop down list)
- AOptionValue - searched
<option>
element value (value of a drop down list item)
Return value:
If the <option>
with a given value
is successfully found (and selected), the return value is the index of that option in a specified drop down list, -1 otherwise.
Source code:
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;
Example usage:
To select the item with thirdvalue
value in drop down list from the HTML document from the question it's possible to use this code (assuming in the WebBrowser1
component here is loaded that document):
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;
Example HTML document from the question:
<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>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…