本文整理自网络,侵删。
uses MSHTML, SysUtils, Variants;
function GetElementById(const Doc: IDispatch; const Id: string): IDispatch;var Document: IHTMLDocument2; // IHTMLDocument2 interface of Doc Body: IHTMLElement2; // document body element Tags: IHTMLElementCollection; // all tags in document body Tag: IHTMLElement; // a tag in document body I: Integer; // loops thru tags in document bodybegin Result := nil; // Check for valid document: require IHTMLDocument2 interface to it if not Supports(Doc, IHTMLDocument2, Document) then raise Exception.Create('Invalid HTML document'); // Check for valid body element: require IHTMLElement2 interface to it if not Supports(Document.body, IHTMLElement2, Body) then raise Exception.Create('Can''t find <body> element'); // Get all tags in body element ('*' => any tag name) Tags := Body.getElementsByTagName('*'); // Scan through all tags in body for I := 0 to Pred(Tags.length) do begin // Get reference to a tag Tag := Tags.item(I, EmptyParam) as IHTMLElement; // Check tag's id and return it if id matches if AnsiSameText(Tag.id, Id) then begin Result := Tag; Break; end; end;end;
例如:<?xml version="1.0"?><!DOCTYPE html PUBLIC "//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Tip#36 Test</title> </head> <body> <p>Paragraph with no id</p> <p id="myid">Paragraph with id = myid</p> </body></html>
procedure TForm1.FormShow(Sender: TObject);begin WebBrowser1.Navigate( 'file:///' + ExtractFilePath(ParamStr(0)) + 'test.html' );end;
procedure TForm1.Button1Click(Sender: TObject);var Elem: IHTMLElement;begin Elem := GetElementById(WebBrowser1.Document, 'myid') as IHTMLElement; if Assigned(Elem) then ShowMessage( 'Tag name = <' + Elem.tagName + '>'#10 + 'Tag id = ' + Elem.id + #10 + 'Tag innerHTML = "' + Elem.innerHTML + '"' );end;
procedure TForm1.Button2Click(Sender: TObject);var Elem: IHTMLElement;begin Elem := GetElementById(WebBrowser1.Document, 'myid') as IHTMLElement; if Assigned(Elem) then Elem.innerHTML := 'My new text';end;
相关阅读 >>
Delphi 用 tbytesstream 类实现的读文件为十六进制字符的函数
Delphi xe andriod 文件后缀对应mime类型
更多相关阅读请进入《Delphi》频道 >>