【问题标题】:Replace multiple instances of the same value in a javascript template替换 javascript 模板中相同值的多个实例
【发布时间】:2015-01-11 10:59:53
【问题描述】:

我有一个 javascript 模板,我想在整个模板的多个位置替换一个设置值,但是在我当前的代码中,只有值占位符的第一个实例发生了变化。

如何将所有 {{color}} 占位符替换为相同的值?

我的模板:

<script type="text/template" id="styleTemplate">    
.item {
    color: {{color}};
    border-color:{{color}};
}
</script>

我的 JS:

var thisColor = "#000";
var template = $("#styleTemplate").html();
$('#styleTarget').html(template.replace("{{color}}",thisColor));

结果:

.item {
    color: #000;
    border-color:{{color}};
}

【问题讨论】:

    标签: javascript jquery templates templating


    【解决方案1】:

    Akamaozu 实在是懒得让他的代码有效了。 斜杠中必须包含正则表达式,而不是反斜杠。当您必须转义具有特殊含义的字符或创建具有特殊含义的元字符时,正则表达式中需要使用反斜杠。因此,当您将代码更改为此它将起作用:

    var thisColor = "#000",
        search = /{{color}}/g,
        template = $("#styleTemplate").html();
    
    $('#styleTarget').html(template.replace(search, thisColor));
    

    DEMO.

    【讨论】:

    • zing。我什至无法解释为什么我认为反斜杠是有意义的,即使在我将链接发布到正则表达式验证器之后也是如此。早上 7 点似乎不是我的黄金时间。
    【解决方案2】:

    替换:

    $('#styleTarget').html(template.replace("{{color}}",thisColor));

    与:

    $('#styleTarget').html(template.replace(\{{color}}\g,thisColor));

    String.prototype.replace 将仅替换第一个匹配项。我所做的是将搜索字符串替换为将搜索所述搜索字符串的所有实例的正则表达式。

    干杯!

    【讨论】:

    • 感谢 Akamaozu,我尝试了您的解决方案,但不幸的是它不起作用。在此处查看 JSfiddle:jsfiddle.net/2uu6f1v1
    • 我替换了我使用的错误正则表达式(没有删除你在正则表达式周围的引号)但 jsfiddle 仍然给我带来问题,所以..regex101.com/r/pI3nY3/1
    • @AdamWilson 另外,如果您在 jsfiddle 示例上运行 jshint,您会看到它在正则表达式中吓坏了,即使它完全有效并且确实有效。我会把代码放在我的服务器上,但我真的很懒惰。如果在我不那么懒惰的时候你无法确认这一点,我会
    猜你喜欢
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    相关资源
    最近更新 更多