首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修改THTMLViewer上的元素样式

修改THTMLViewer上的元素样式
EN

Stack Overflow用户
提问于 2019-03-30 01:32:57
回答 2查看 258关注 0票数 0

我在Delphi上使用THTMLViewer,加载后我需要修改一些样式,比如字体颜色或背景颜色。如果我只知道元素ID,我该如何实现呢?我猜它与IDDisplay有某种关系,但在帮助文件和演示中找不到任何线索。假设我有这样的html:

代码语言:javascript
运行
复制
<html>
  <body>
    <span id="text1">This is text 1</span>
    <a href="#" id="link1">This is link 1</a>
  </body>
</html>

如果我想要更改颜色,例如text1颜色变为红色,我应该怎么做?

EN

回答 2

Stack Overflow用户

发布于 2019-03-31 04:26:15

您可以在加载HTML时对其进行编辑。下面是一个可以做到这一点的例子。

如果你需要更多的样式,除了简单地添加一个带有<style>元素的<head>来指定一个CSS文件,或者直接在<html>标签后面添加样式。

您必须实现OnParseBegin事件:

代码语言:javascript
运行
复制
procedure TForm2.FormCreate(Sender: TObject);
begin
  // Of course you can also load from file or stream or URL:
  HtmlViewer1.LoadFromString(
    '<html>' +
    '  <body>' +
    '    <h1>Yay! This works!</h1>' + 
    '    <p>This paragraph is not red.</p>' +
    '    <p><span id="text1">This is text 1.</span> this comes after it.</p>' +
    '    <p><a href="#" id="link1">This is link 1</a>.</p>' +
    '    <p>This paragraph is normal too.</p>' + 
    '  </body>' +
    '</html>');
end;

procedure TForm2.HtmlViewer1ParseBegin(Sender: TObject; var Source: TBuffer);
var
  S: string;
  B: TBuffer;
begin
  S := Source.AsString;

  // Add inline styling.
  S := StringReplace(S, 'id="text1"', 'id="text1" style="color: Red"', []);

  B := TBuffer.Create(S);
  try
    Source.Assign(B);
  finally
    B.Free;
  end;
end;
票数 0
EN

Stack Overflow用户

发布于 2019-03-31 17:38:20

现在我们要说的是。正如我之前所写的,我需要在加载超文本标记语言之后更改样式,换句话说,不能在OnParseBegin上这样做,因为OnParseBegin在超文本标记语言完全加载或呈现之前发生,无论使用什么术语。考虑以下脚本:

代码语言:javascript
运行
复制
procedure TForm1.FormCreate(Sender: TObject);
begin
  HtmlViewer1.LoadFromString('<html><head></head><body><a id="link1" href="link1" color="#00ff00">This is red link, click this link to change it to green</a></body></html>');
end;

procedure TForm1.HtmlViewer1HotSpotClick(Sender: TObject; const SRC: string;
  var Handled: Boolean);
begin
  if HtmlViewer1.LinkAttributes.Values['href']='link1' then
  begin
    MessageBox(0,'This link event is captured, but how to change the text color here?','Some Title',0);
  end;
end;

..。

当然,我可以很容易地编写脚本来重新加载OnHotSpotClick中的HTMLViewer,并将元素样式(即颜色)更改为绿色。但是,仅仅为了修改一个元素而重新加载整个HTML正文似乎太过分了。例如,我寻找可以用jQuery完成的类似操作

代码语言:javascript
运行
复制
<script>
  function changeText(obj) {
    $(obj).css(color,'#00ff00');
  }
</script>

<a href="#" onclick="changeText(this); return false;" style="color:#ff0000;">This is red text, click here to change it to green</a>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55422791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档