迭代IHTMLElementCollection

时间:2011-10-10 11:59:51

标签: delphi delphi-2009 loops ihtmldocument2

有没有办法迭代IHTMLElementCollection?

,例如

var
  e : IHTMLLinkElement;
elementCollection:IHTMLElementCollection;
begin
    for e in elementCollection do
      showmessage(e.caption);
end;

我知道有一个名为_newEnum的属性,但在delphi中不支持我能理解的内容。

更新: 优秀的链接是IHTMLElement而不是IHTMLLinkElement

2 个答案:

答案 0 :(得分:6)

for I := 0 to Pred(elementCollection.length) do
begin
  e := elementCollection.item(I, EmptyParam) as IHTMLElement;
  //...
end;

答案 1 :(得分:2)

使用_newEnum的代码如下所示。如果您确定集合中只有链接元素项,则可以将内循环的as IHTMLElement部分(和elem值类型)更改为as IHTMLAnchorElement(IHTMLLinkElement似乎是某些内容)完全不同)

uses MSHTML, ActiveX;

var
  collection:IHTMLElementCollection;
  enum:IEnumVariant;
  v:OleVariant;
  u:IUnknown;
  element:IHTMLElement;
begin
  //...
  enum:=collection._newEnum as IEnumVariant;
  while enum.Next(1,v,u)=S_OK do
   begin
    elem:=u as IHTMLElement;
    //...
   end;