HTML标记如何在脚本标记内工作?

时间:2011-04-15 15:45:21

标签: javascript html script-tag

例如,Joel Spolsky's public career profile

处的view-source
<script type="text/html" id="stackexchangeanswerswidget">
    <h3>Top Answers</h3>

    <div class="answers">
    </div>

</script>

<script type="text/html" id="topanswer">
    <div class="top-answer">
        <div class="top-answer-stats">{{= shared.htmlEncode(Score) }}</div>
        <span class="top-answer-title"><a href="{{=AnswerLink}}">{{= shared.htmlEncode(Title) }}</a></span>
        <a class="add-answer">add</a>
        <br class="clear" />
    </div>
</script>

<script type="text/html" id="answer-view">
    <div class="answer">
        <div class="answer-stats {{= shared.htmlEncode(Site.toLowerCase().replace(/ /g, '')) }}">
            <div class="score">
                <strong>{{= shared.htmlEncode(Score) }}</strong>
                <div class="votecount">votes</div>
            </div>
            <img class="answer-logo" src="{{= shared.htmlEncode(FaviconUrl) }}" />
        </div>
        <div class="answer-content">
            <span class="q">Q:</span>

            <div class="answer-top">

                <a class="answer-title" href="{{= shared.htmlEncode(AnswerLink) }}">{{= shared.htmlEncode(Title) }}</a><br />
            </div>

            <span class="a">A:</span><div class="answer-body">{{= Body }}</div>

            <div class="more-button" style="text-align:center; clear:both; display:none;"><a class="more">More</a></div>

        </div>
    </div>
</script>

HTML标记如何在脚本标记内工作?和/或用于那些html标记的技术和脚本标记内的模板类似{{= .... }}

2 个答案:

答案 0 :(得分:26)

您可以在<script>标记中添加任何内容。如果您指定的内容类型不是Javascript(或浏览器可以理解的其他脚本语言),则浏览器不会解释它,您只能以纯文本格式访问它。由于<script>标记的内容被视为CDATA,因此不会解析内容,您可以在内容中存储不带引号的XML或HTML(只要您不在其中放置</script>标记即可内容,因为这将关闭你的元素。)

例如,这可以在SVG Web中使用,这是一种polyfill,它允许您在HTML中使用内联SVG,并在支持它的浏览器中将其转换为本机SVG,或者在不支持它的浏览器中转换为Flash。它允许在不支持它的浏览器中嵌入SVG,将其包装在<script>标记中,因此浏览器不会尝试将其解析为HTML。

对于SO职业生涯,它们看起来像是存储模板,以便在<script>标记中与Backbone.jsUnderscore.js一起使用,因为这是在HTML中粘贴模板的便利位置。这是他们的代码片段,他们抓住模板并将其提供给Underscore模板引擎:

    TopAnswerView = Backbone.View.extend({
        template: _.template($("#topanswer").html()),
        events: {
            "click .add-answer": "addAnswerToCV"
        },

答案 1 :(得分:8)

密钥位于脚本的类型属性中。通过将其设置为 type =“text / html”,它不会被浏览器的JavaScript引擎运行。相反,它用于其他事情,例如模板。此示例似乎将这些标记用于模板。

查看此MIX 2011网络广播,其中显示Knockout.js中如何使用类似内容:

http://channel9.msdn.com/events/mix/mix11/FRM08