【问题标题】:jQuery returns wrong HTMLjQuery 返回错误的 HTML
【发布时间】:2015-05-05 00:48:53
【问题描述】:

问题:jQuery返回错误的HTML值
jQuery版本:jquery-1.10.2.min.js

由于某种原因,$("#peopleTemplate").html() 返回了错误的 HTML。 而不是返回,

<table>
    <thead>
        <tr>
            <th>First Name</th>
            <th>Last Name</th>
        </tr>
    </thead>
    <tbody>
        {{#people}}
        <tr>
            <td>{{FirstName}}</td>
            <td>{{LastName}}</td>
        </tr>
        {{/people}}
    </tbody>
</table>

,jQuery 返回以下内容。

        {{#people}}

        {{/people}}
    <table>
    <thead>
        <tr>
            <th>First Name</th>
            <th>Last Name</th>

        </tr>
    </thead>
    <tbody><tr>
            <td>{{FirstName}}</td>
            <td>{{LastName}}</td>

        </tr></tbody>
</table>

我错过了什么?

这里是有问题的完整来源。

@using Demo.Javascript.Template.Hogan.Models
@model List<Person>

@{
    ViewBag.Title = "People";
}

<h2>People</h2>

<div id="peopleTemplate" class="template">
    <table>
        <thead>
            <tr>
                <th>First Name</th>
                <th>Last Name</th>
            </tr>
        </thead>
        <tbody>
            {{#people}}
            <tr>
                <td>{{FirstName}}</td>
                <td>{{LastName}}</td>
            </tr>
            {{/people}}
        </tbody>
    </table>
</div>

<div id="main"></div>

<script language="javascript">
    debugger;
    //var data = { "people" : @Html.Raw(Json.Encode(@Model)) };
    var data = {
        "people": [
            { "FirstName": "John", "LastName": "Doe" },
            { "FirstName": "Jane", "LastName": "Doe" },
            { "FirstName": "Robert", "LastName": "Smith" },
            { "FirstName": "Mike", "LastName": "Durden" },
            { "FirstName": "Marilin", "LastName": "Monroe" }
        ]
    };
    var template = Hogan.compile($("#peopleTemplate").html());
    var rendered = template.render(data);
    $("#main").html(rendered);
</script>

【问题讨论】:

    标签: jquery asp.net-mvc hogan.js


    【解决方案1】:

    您的模板 HTML 无效,请尝试使用 &lt;script&gt; 标记包装您的模板,如下所示:

    <script id="peopleTemplate" type="text/html">
        <div class="template">
            <table>
                <thead>
                    <tr>
                        <th>First Name</th>
                        <th>Last Name</th>
                    </tr>
                </thead>
                <tbody>
                    {{#people}}
                    <tr>
                        <td>{{FirstName}}</td>
                        <td>{{LastName}}</td>
                    </tr>
                    {{/people}}
                </tbody>
            </table>
        </div>
    </script>
    

    工作版本:http://jsfiddle.net/fcbwh1wp/

    【讨论】:

    • 出于某种原因,Visual Studio 抱怨脚本中的 HTML 元素不正确,从而导致代码格式不正确...如您在此处看到的 imgur.com/e5qsLGk 。但如果我做错了什么,我会双重/三重检查。
    • @Sung 尝试在script 标签上设置type="text/html" 并将class 属性移动到div 块。
    • 添加 type="text/html" 解决了这个问题。这看起来比注释掉 hogan/mustache 标签更优雅。谢谢,布伦特。
    【解决方案2】:

    实际上,您不应该知道您期望的回报,因为您的 HTML 完全无效。 &lt;tbody&gt; 元素中不能有文本。

    {{#people}}

    您在不允许出现的地方使用了字符数据。可能导致此错误的错误包括:

    • 将文本直接放在文档正文中,而不将其包装在容器元素中(例如&lt;p&gt;Paragraph&lt;/p&gt;),或者

    • 忘记引用属性值(其中“%”和“/”等字符很常见,但不能在没有引号的情况下出现),

    • 或 在 HTML 4.01 或更早版本中使用 XHTML 样式的自闭合标签(例如 )。要解决此问题,请删除多余的斜杠 ('/') 字符。有关其原因的更多信息,请参阅 SGML、HTML、XML 和 XHTML 中的空元素。

    【讨论】:

    • 我从答案中得知&lt;tbody&gt; 元素中不能有无效元素。所以我所做的就是将它们注释掉,就像这里显示的那样。 i.imgur.com/TmAsTlf.png 。这有点麻烦,但很管用。
    【解决方案3】:

    我很确定这与无效的 HTML 有关。

    &lt;tbody&gt; 标签允许拥有的唯一直接子元素是&lt;tr&gt; 元素。 {{#people}} 不是 &lt;tr&gt; 标签,因此不是有效的子标签。 &lt;tbody&gt; 标签请参考W3 definition

    我会假设您的浏览器在呈现页面时正在更正 HTML,并且 jQuery 准确地返回您的 DOM 结构中表示的内容(这与查看源代码不同)。这是浏览器的常见功能,可纠正 HTML 中缺少的标签,或尝试纠正 HTML 结构的其他常见错误。

    【讨论】:

    • 感谢您的回答,但是当我按时间对答案进行排序时,Erik 的答案首先出现。但是谢谢你的回答,所以 1+
    猜你喜欢
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2012-05-22
    • 1970-01-01
    • 2011-10-11
    相关资源
    最近更新 更多