1

有没有办法在原型中从 HTML 创建元素,类似于 jQuery 的$('<div>Foo</div>')

基本上,我从 Handlebars 模板创建 HTML 块,并希望插入 DOM,但不想将其包装在其他元素中。

4

1 回答 1

1

我将此功能作为“静态方法”添加到 Mustache 中,用于我最近的一个项目以解决相同的问题。我不相信 Prototype 内置任何东西来解决这个问题。我使用隐藏的文本区域来保存我的模板代码,因此$F()调用。最后 3 行更具体到您的问题 - 创建一个新 div,插入您应用的模板 html,然后返回第一个后代(此时作为元素)。这假设您的模板只有一个根元素。

Mustache.createElementFromTemplateId = function(templateId, data) {
    if (!this.cachedTemplates) this.cachedTemplates = {};

    var templateStr = this.cachedTemplates[templateId];
    if (!templateStr) {
        templateStr = $F(templateId);
        this.cachedTemplates[templateId] = templateStr;
    }

    var appliedTemplateStr = this.render(templateStr, data);

    var div = new Element("div");
    div.insert( appliedTemplateStr );
    return div.firstDescendant();
};
于 2012-07-19T15:45:28.993 回答