Проверьте, имеет ли элемент с идентификатором значение

Как проверить, есть ли "Some text value" в элементе p с Id = "SomeID"?

<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;

person Community    schedule 18.11.2012    source источник
comment
Что касается вашего обновления, я не уверен, так как не смог точно воспроизвести проблему в вашем комментарии, но, ИМХО, я считаю, что вам лучше; Объявите временный вариант (например, «элемент») и назначьте ему Web.OleObject.Document.GetElementByID(Id), затем проверьте наличие VarIsClear, что позаботится о недопустимом «ID». Другой временный вариант (например, «текст») и text:=element.innerText, и проверьте наличие VarIsNull в «тексте», прежде чем назначать «результат».   -  person Sertac Akyuz    schedule 18.11.2012


Ответы (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);
person Sertac Akyuz    schedule 18.11.2012
comment
@Joey - я изменил один из твоих идентификаторов: SomeOtherID, может быть, это из-за этого? - person Sertac Akyuz; 18.11.2012
comment
Ошибка выдается, если текста нет, но если он есть, он работает. Так что, вероятно, он содержит NULL, но как проверить, содержит ли он его? - person ; 18.11.2012
comment
@Joey - Здесь с XE2 я получаю пустой текст для абзаца без текста. Если идентификатор недействителен, вы можете проверить VarIsClear на временном варианте, который был назначен «WebBrowser1.OleObject.Document.GetElementByID('SomeID')», если временный вариант имеет значение null, вы можете проверить VarIsNull, в противном случае я не знать. В худшем случае вы можете перехватить ошибку, но, конечно, не очень элегантно. - person Sertac Akyuz; 18.11.2012
comment
почему первый код не должен возвращать ничего, если значение атрибута отображается: нет? (Не зная, что делает «.Display») - person mjn; 18.11.2012
comment
@mjn - это свойство отображения атрибута стиля, поместите «блок» в источник, и он извлечет «блок», поместите «что угодно» и извлечет пустой текст. Но, честно говоря, я вообще не эксперт по DOM... - person Sertac Akyuz; 18.11.2012