【问题标题】:Check if Element with ID has a value检查具有 ID 的元素是否有值
【发布时间】:2012-11-18 16:43:04
【问题描述】:

如何在 Id = "SomeID" 的元素 p 中检查 "Some text value" 是否存在?

<p id="SomeID" class="error" style="display: none"></p>

<p id="SomeID" class="error" style="display: none">Some text value</p>

这里是函数形式..

function ElementIdText(Web:TembeddedWB; Id:string):string;
var
  node: string;
begin
  if Assigned(Web.Document) and web.DocumentLoaded then begin
  node:=Web.OleObject.Document.GetElementByID(Id).innerText;
  if not VarIsNull(Node) and not VarIsClear(Node) and not AnsiSameStr(node,'') then
  result:=node;
  end;
end;

【问题讨论】:

  • 关于您的更新,我不确定,因为我无法在您的评论中复制确切的问题,但恕我直言,我相信您会更好;声明一个临时变体(例如“元素”)并为其分配Web.OleObject.Document.GetElementByID(Id),然后检查VarIsClear,这将处理无效的“ID”。另一个临时变体(例如'text')和text:=element.innerText,并在分配给'result'之前检查'text'上的VarIsNull

标签: delphi delphi-xe2 twebbrowser


【解决方案1】:

给定

<p id="SomeID" class="error" style="display: none"></p>
<p id="SomeOtherID" class="error" style="display: none">Some text value</p>

要检索属性,请使用:

ShowMessage(WebBrowser1.OleObject.Document.
    GetElementByID('SomeOtherID').getAttribute('style').Display);

将输出“无”。

要获取段落的文本,您可以使用:

ShowMessage(WebBrowser1.OleObject.Document.
    GetElementByID('SomeOtherID').innerText);

【讨论】:

  • @Joey - 我更改了你的一个“ID”:SomeOtherID,也许是因为这个?
  • 如果文本不存在则抛出错误,但如果存在则有效。它很可能包含 NULL 但如何检查它是否包含它?
  • @Joey - 在这里使用 XE2,我得到一个没有文本的段落的空文本。如果 ID 无效,您可以检查分配给“WebBrowser1.OleObject.Document.GetElementByID('SomeID')”的临时变体上的VarIsClear,如果临时变体为空,则可以检查VarIsNull,否则我不知道。在最坏的情况下,您可以捕获错误,但当然不是很优雅。
  • 如果属性值为“display: none”,为什么第一个代码要返回“none”? (不知道“.Display”在做什么)
  • @mjn - 它是样式属性的显示属性,将'block'放在源中,它将检索'block',放入'anything',它将检索空文本。但坦率地说,我根本不是 DOM 专家……
猜你喜欢
  • 1970-01-01
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-25
  • 1970-01-01
  • 2020-07-09
相关资源
最近更新 更多