HTML 编辑器删除标签内的自由标记<table>标签



我使用FreeMarker构建从电子邮件到发票模板的各种模板。我现在正在寻找的问题与在表标签外部提取的 FreeMarker 代码有关,因为 HTML 不允许在 tbody、thead、tr 之外的其他字符。

如果有人知道如何绕过这一点,将很高兴。

例:

<table>
<tbody>
[#assign eventDetails = []]
[#if items?? && items?has_content]
[#list items as item]
<tr>
<td  style="padding: 5px;vertical-align: top;border-bottom: 1px solid #eee; text-align: center;">
${item.name}
</td>
</tr>
[/#list]
[/#if]
</tbody>
</table>

在使用element.innerHTML应用于编辑器后变得像这样:

[#assign eventDetails = []]
[#if items?? && items?has_content]
[#list items as item]
[/#list]
[/#if]
<table>
<tbody>

<tr>
<td  style="padding: 5px;vertical-align: top;border-bottom: 1px solid #eee; text-align: center;">
${item.name}
</td>
</tr>
</tbody>
</table>

当然,这仅取决于您使用的HTML编辑器,但是如果发生相同的情况,您应该尝试:

  • 您改用的是<#...>语法。这看起来像是编辑器的一些未知标签,而不是 CDATA,所以它可能的反应方式不同。
  • <tbody>...</tbody>替换为[@html.tbody]...[/@html.tbody]。然后编辑器可能没有足够的信心删除内容。或者,与[@html.table]等相同。很尴尬,但可能比你现在拥有的要好。(为了在运行模板时实际工作,您当然必须在html命名空间中定义tbody宏。它不是内置的。

最后一个示例:

<#ftl output_format='HTML'>
<#macro table attrs...><@elementWithNested 'table' attrs><#nested></@></#macro>
<#macro tbody attrs...><@elementWithNested 'tbody' attrs><#nested></@></#macro>
<#macro elementWithNested elementName attrs>
<${elementName}<#if attrs?size != 0><#list attrs as k, v> ${k}="${v}"</#list></#if>>
<#nested>  
</${elementName}>
</#macro>

如果上面的模板被#import-ed 为html,那么<@html.table foo="bar">...</@html.table>等将起作用。

最新更新