1

有没有办法迭代 IHTMLElementCollection?

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

我知道有一个名为 _newEnum 的属性,但是据我所知,delphi 不支持它。

更新:显然链接是 IHTMLElement 而不是 IHTMLLinkElement

4

2 回答 2

6
for I := 0 to Pred(elementCollection.length) do
begin
  e := elementCollection.item(I, EmptyParam) as IHTMLElement;
  //...
end;
于 2011-10-10T12:13:27.890 回答
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;
于 2011-10-10T13:57:05.030 回答