span doesn't apply css style when entered via innerHTML
我有一个Angular应用程序,作为它的一部分,我在div中显示了查询结果(其ID为JSONContainer)。
我想突出显示结果中的特定查询,因此我使用了一个管道来搜索结果,并将文本中的FIELD:VALUE替换为:
1 | <span class="highlightSpan">FIELD:VALUE</span>. |
我向组件添加了以下CSS:
1 2 3 4 5 6 | div#JSONContainer span.highlightSpan{ background-color: rgba(28, 243, 28, 0.5) !important; color:red !important; padding: 1px; margin:1px; } |
我也尝试在.highlightSpan下添加相同的样式,并获得相同的结果。
我通过使用存储整个JSON的'data'变量和存储查询的'query'变量,通过innerHTML在包含组件中插入了该跨度和其余文本:
1 2 | <div class="col-xs-12" id="JSONContainer" [innerHTML]="data | textHighlight:query"> |
(我不使用字符串插值,因为数据变量是json形状的,我使用html代码(例如html br标签)设置了样式,而字符串插值仅显示文本。)
当我将鼠标指向google dev工具中的relevent span时,我看到创建了带有该类的span:
但是css样式未应用,甚至在Google开发工具中也未显示:
编辑:我知道它没有显示(我从img中删除了它),但是跨度位于div#JSONContainr中,如所述。
编辑2:
这是相关的树:
为什么会这样呢?
如何使CSS样式适用?
谢谢!
发生这种情况是因为您正在动态添加
您可以将CSS更改为:
为组件的后代(其他动态添加的组件或元素)设置样式。 或者,您可以将样式添加到全局样式中,这样它就不会成为组件隔离的一部分。
我创建了stackblitz演示来模拟您的情况。
您可以阅读有关角度视图封装的更多信息。
在您的PIPE中,您必须导入
1 | import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; |
添加到构造函数
1 2 | constructor(private sanitizer: DomSanitizer) { } |
在转换函数中返回
1 | this.sanitizer.bypassSecurityTrustHtml('YOUR HTML'); |