Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Как получить текст HTML элемента  [new]
LordGray
Member

Откуда:
Сообщений: 69
Здравствуйте! Казалось бы, простой распространенный случай, но что-то не нахожу решения.
<span>123<button>abc</button></span>

Нужно получить текст из SPAN, но без текста вложенных элементов. Т.е. надо получить '123'
Что пробовал:
procedure ExtractText(E: IHTMLElement);
var
  N: IHTMLDOMNode3;
begin
  ShowMessage(E.innerText);//123abc
  ShowMessage(E.outerText);//123abc
  ShowMessage(E.title);//''
  if Supports(E, IHTMLDOMNode3, N) then
  ShowMessage(N.textContent);//123abc
  ...

Других способов не знаю и не нашел. Может кто подскажет?
28 май 21, 17:33    [22328576]     Ответить | Цитировать Сообщить модератору
 Re: Как получить текст HTML элемента  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12901
Так не получится? (Псевдокод)
if Supports(E, IHTMLDOMNode, Node) then begin
  childs := Node.childNodes;
  for child in childs do begin
    if Supports(child, IHTMLDOMTextNode, text) then
      ShowMessage(text.data);
  end;
end;
Скорее всего childs нужно будет кастануть к IHTMLElementCollection

Сообщение было отредактировано: 28 май 21, 17:36
28 май 21, 17:44    [22328580]     Ответить | Цитировать Сообщить модератору
 Re: Как получить текст HTML элемента  [new]
LordGray
Member

Откуда:
Сообщений: 69
_Vasilisk_,
Увы.
childNodes не поддерживает IHTMLElementCollection. В сети нашел, что он поддерживает IHTMLDOMChildrenCollection. Но это не спасло, т.к. не нашелся ни один IHTMLDOMTextNode.
Но идея понятна, и понравилась! Появились мысли, сейчас попробую, и потом отпишусь.
28 май 21, 18:14    [22328599]     Ответить | Цитировать Сообщить модератору
 Re: Как получить текст HTML элемента  [new]
LordGray
Member

Откуда:
Сообщений: 69
Получилось. Спасибо!

if Supports(E, IHTMLDOMNode, N) then 
  if Supports(N.childNodes, IHTMLDOMChildrenCollection, k2) then
  for i := 0 to k2.length - 1 do
    if Supports(k2.item(i), IHTMLDOMTextNode, text) then
      ShowMessage(text.data);
28 май 21, 18:38    [22328615]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить