【问题标题】:html() is not populating HTML templatehtml() 没有填充 HTML 模板
【发布时间】:2022-01-17 08:23:22
【问题描述】:

这快把我逼疯了。谁能看到我做错了什么?

这是我的 HTML 模板。

<template id="note-template">
    <div class="trip-note">
    </div>
    <div class="trip-note-footer">
        <div class="d-flex justify-content-between">
            <div>
                <span class="note-author"></span>
                &bull;
                <span class="note-date"></span>
            </div>
            <div>
                <img class="edit-note" src="~/images/tteditnote.png" title="Edit Note">
                <img class="delete-note" src="~/images/ttdeletenote.png" title="Delete Note">
            </div>
        </div>
    </div>
</template>

这是我的 JavaScript。

var $container = $('#trip-notes');
var $template = $('#note-template');
$container.empty();
response.forEach(function (element) {
    var $note = $($template.html());
    $note.find('.trip-note').html(element.html);
    $note.find('.note-author').text(element.author);
    $note.find('.note-date').text(element.createDate);
    $container.append($note);
});

除了我的div.trip-note 没有设置为element.html 中的值之外,一切都按预期工作。

authorcreateDate 设置得很好。我已经确认 element.html 包含预期的标记。我已经多次重新键入类名(在标记和 JavaScript 中)。我尝试混合和匹配html()text(),结果始终相同:除了div.trip-note,所有元素都已填充。

我要么遗漏了一些非常愚蠢的东西,要么出现了一个特殊的问题。

更新

我创建了一个jsfiddle

【问题讨论】:

  • 请发帖minimal reproducible example。您可以使用Stack Snippet 使其可执行。
  • .find() 只搜索后代。 .trip-note$note 中的顶级元素,而不是后代。
  • "Uncaught ReferenceError: response is not defined",

标签: javascript html jquery


【解决方案1】:

.find() 搜索后代,它不会找到您正在搜索的顶级元素。由于.trip-note$note 的顶级元素之一,因此被选中。

不要使用$template.html(),而是克隆$template。那么一切都将是一个后代。您可以在附加到 $container 时使用 .html() 来排除 &lt;template&gt; 顶级元素。

var $container = $('#trip-notes');
var $template = $('#note-template');
$container.empty();
response.forEach(function (element) {
    var $note = $template.clone();
    $note.find('.trip-note').html(element.html);
    $note.find('.note-author').text(element.author);
    $note.find('.note-date').text(element.createDate);
    $container.append($note.html());
});

【讨论】:

  • 谢谢!我不了解find()。但是,您的代码不会为我填充任何内容。有些地方不太对劲。
  • 你能提供一个minimal reproducible example 以便我可以尝试调试我的答案吗?
  • @Barmer:我在我的问题中添加了一个 jsFiddle。
  • @Barmer:您的代码对我不起作用的原因是因为我的模板使用了&lt;template&gt; 标签。当您.clone() 模板时,您似乎无法使用 jQuery 以任何方式修改它。如果我将其更改为&lt;div&gt; 标签,它工作正常。但我想使用&lt;template&gt; 标签。
  • 既然您回答了为什么我的原始代码不起作用的问题,也许我会继续接受您的回答,然后发布一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 2021-11-17
  • 2011-08-16
  • 1970-01-01
相关资源
最近更新 更多