1

クラス名を持つ要素から InnerText を取得するにはどうすればよいですか?

<div class="SomeClass" style="text-align: left; display: block;"></div>

<div class="SomeClass" style="text-align: left; display: block;">Sometext</div>
4

2 に答える 2

1

わかりましたクラスは、おそらく複数のTstringListを使用する必要があります。私はあなたのために関数を作成しました:

function GetInnersByClass(const Doc: IDispatch; const classname: string;var Lst:TStringList): Integer;
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 body
begin
  Lst.Clear;
  Result := 0 ;
  // 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.className, classname) then
    begin
      Lst.Add(Tag.innerHTML);
      Inc(Result);
    end;
  end;
end;

結果は、それぞれ関数を持つクラスの数です

そして、あなたはこのサンプルでそれを使用することができます:

var
  lst : TStringList;
begin
  //
  lst := TStringList.Create;
  GetInnersByClass(wb1.Document,'SameClass',lst);
  ShowMessage(lst.Text);
  lst.Free;
end;

MSHTML ユニットを本体に追加することを忘れないでください。

于 2012-11-18T20:07:50.027 に答える
1

こんにちは、HTML doc で値を検索するには、同じ id という特別なプロパティが必要です。

重要な特殊財産です。

たとえば、この関数を使用して内部テキストを見つけることができますが、 id を使用します。

function GetInnerElementById(const Doc: IDispatch; const Id: string): WideString;
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 body
begin
  Result :='';
  // 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.innerHTML;
      Break;
    end;
  end;
end;

「MSHTML」ユニットを使用する必要があります...

そしてあなたはサンプルでそれを使うことができます:

</head>
<body>
<div id="TESTID">sametext</div>
</body>


ShowMessage(GetElementById(wb1.Document,'TESTID'));

SomeClass を使用する必要がある場合は、新しい機能を提供することを教えてください....

于 2012-11-18T19:53:13.287 に答える