【问题标题】:How do I nest HTML comments?如何嵌套 HTML 注释?
【发布时间】:2012-08-03 22:39:32
【问题描述】:

这是一个非常简单的问题,但它激怒了我。例如,我想评论以下内容:

<!--  
        {if $scenes}
            <!-- Scenes -->
            {include file="$tpl_dir./scenes.tpl" scenes=$scenes}
        {else}
            <!-- Category image -->
            {if $category->id_image}
            <div class="align_center">
                <img src="{$link->getCatImageLink($category->link_rewrite, $category->id_image, 'category')}" alt="{$category->name|escape:'htmlall':'UTF-8'}" title="{$category->name|escape:'htmlall':'UTF-8'}" id="categoryImage" width="{$categorySize.width}" height="{$categorySize.height}" />
            </div>
            {/if}
        {/if}
    -->

我想注释掉所有这些文本,所以浏览器不会显示此代码。问题是我已经有 cmets 并且浏览器似乎混淆了结束标记。因此在这种情况下,当我希望它影响整个文本时,第一个打开的评论标签只会影响 {if $scenes}。你能告诉我怎么做吗?!?!

谢谢,

丹尼

【问题讨论】:

  • 我的解决方案:不要(因为 SGML/HTML/XML 不支持它).. 使用 DVCS 和/或其他“历史”;-) 话虽如此,也许是引擎/模板有可以使用的替代评论吗?例如,在 ASP.NET 中,&lt;%-- This is a comment that doesn't even get into the HTML output --%&gt;

标签: html comments


【解决方案1】:

如果我理解正确,您希望能够嵌套 HTML cmets。为此,您需要将双破折号 -- 替换为两个单破折号和一个空格 - -

基本上,

<!--
  This is a comment.
  <!- - 
    This is a nested comment.
  - ->
-->

将其应用到您的代码中,您应该会得到如下结果:

<!--  
        {if $scenes}
            <!- - Scenes - ->
            {include file="$tpl_dir./scenes.tpl" scenes=$scenes}
        {else}
            <!- - Category image - ->
            {if $category->id_image}
            <div class="align_center">
                <img src="{$link->getCatImageLink($category->link_rewrite, $category->id_image, 'category')}" alt="{$category->name|escape:'htmlall':'UTF-8'}" title="{$category->name|escape:'htmlall':'UTF-8'}" id="categoryImage" width="{$categorySize.width}" height="{$categorySize.height}" />
            </div>
            {/if}
        {/if}
    -->

【讨论】:

  • +1 虽然,它遗漏了一些细节(例如,为什么是- -?)而且,公平地说,这不是嵌套.. 这是为了防止 [new] 评论无效评论。
  • 谢谢,这完美地回答了我的问题。也许它不是嵌套......我对确切的术语不太了解。感谢 Mohamad,正如我们在西班牙所说,清澈如水!
  • 您实际上不必在双破折号之间放置空格。当您在第一个破折号后放置一个空格时,它是无效评论,它实际上被认为是“虚假”评论。它作为评论起作用并且不关闭前一条评论的原因是因为它之后作为评论标记呈现。
【解决方案2】:

那里的语言不是 HTML,而是一种生成HTML的语言。该语言显然支持嵌套的 if/else 条件,因为您展示了一个非常典型的例子。因此,即使生成 HTML 的语言本身缺少嵌套 cmets,您也可以使用条件语句从执行中删除部分内容,从而抑制 HTML 的生成:

假设标记 false 表示布尔值 false(用给定模板语言中的正确表达式替换 false):

{if false}
    {if $scenes}
    <!-- ... >
    {else}
    ...
    {/if}
{/if}

if false 块中的所有内容都不会被处理器输出。

【讨论】:

    猜你喜欢
    • 2013-08-11
    • 2010-10-01
    • 2012-01-17
    • 1970-01-01
    • 2019-03-11
    • 2012-08-01
    • 1970-01-01
    • 2015-01-27
    • 2011-07-12
    相关资源
    最近更新 更多