gpt4 book ai didi

css - 如何获取 IHTMLElement 的所有 IHTMLStyle 属性?

转载 作者:行者123 更新时间:2023-11-28 10:19:03 25 4
gpt4 key购买 nike

我使用下面的代码:

const
HTML_DOC =
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">' +
'<BODY><P id="p1" style="width: 440px; height: 344px; margin: 3px 2px; float: left;">test</P></BODY>' +
'</HTML>';

procedure TForm1.Button1Click(Sender: TObject);
var
HTMLTxtRange: IHTMLTxtRange;
HTMLDocument: IHTMLDocument2;
HTMLElement: IHTMLElement;
HTMLStyle: IHTMLStyle;
begin
WebBrowser1.Navigate('about:blank');
while WebBrowser1.ReadyState < READYSTATE_COMPLETE do
Application.ProcessMessages;

HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
HTMLTxtRange := (HTMLDocument.body as IHTMLBodyElement).createTextRange;
HTMLTxtRange.PasteHTML(HTML_DOC);

HTMLElement := (HTMLDocument as IHTMLDocument3).getElementById('p1');
if Assigned(HTMLElement) then
begin
HTMLStyle := HTMLElement.style {as IHTMLStyle2};
Memo1.Lines.Add(HTMLStyle.cssText); // MARGIN: 3px 2px; WIDTH: 440px; FLOAT: left; HEIGHT: 344px
Memo1.Lines.Add(HTMLStyle.getAttribute('margin', 0)); // 3px 2px
end;
end;

我的问题是:如何在不手动解析 HTMLStyle.cssText 的情况下使用 DOM 集合获取可用样式属性的列表,即预期输出:

MARGIN
WIDTH
FLOAT
HEIGHT

最佳答案

IHTMLStyle(或其后代)不公开那种功能。但是,由于 IHTMLStyle 确实实现了 IDispatch 接口(interface),您可以尝试使用 IDispatch.GetTypeInfo() 来获取 ITypeInfo 描述样式对象的接口(interface),然后循环访问其可用属性,使用 IDispatch.Invoke() 读取您发现的每个属性的值。但是,如果 GetTypeInfo() 没有返回可行的 ITypeInfo,那么您就不走运了,您将不得不解析 IHTMLStyle.cssText相反。

关于css - 如何获取 IHTMLElement 的所有 IHTMLStyle 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14200264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com