Javascript 更快地替换 HTML 代码中的 "variables"

标签 javascript html regex angularjs performance

我正在使用 javascript 和新的 html 构建一个多语言单页网站 template -tag 并希望使用自己的变量,如 {{txt.welcome}}在 html 中,应由翻译替换。

HTML:

<div class="container">
  <h2>{{heading.hello}}</h2>
  <p>{{txt.welcome}}<br /><img alt="{{image.description}}" src="" /></p>
</div>

Javascript:

var reg = new RegExp(/{{([a-z.]+)}}/g);
var result;
while(result = reg.exec(document.documentElement.innerHTML)) {
    document.documentElement.innerHTML = document.documentElement.innerHTML.replace(result[0], translations[result[1]]);
}

它会在整个文档中搜索变量并用定义的文本替换它们,但是对于很多变量,性能会变得非常糟糕。

有什么比在整个文档的 html 上使用正则表达式循环更快的解决方案?

其他图书馆怎么办like AngularJS{{ 'FOO' | translate }}

最佳答案

我认为,最大的问题是您不仅要运行正则表达式,还要多次对整个 HTML 运行替换。而且您要多次设置实际的 DOM HTML,而不是在获得结果之前操作字符串,然后设置一次 HTML。我强烈建议使用像 Handlebars.js 这样的库,但是如果你想自己做,一个非常快速的实现是这样的:

var translations = { 
    heading: { 
        hello: "hello" 
    }, 
    txt: { 
        welcome: "welcome" 
    }, 
    image: { 
        description: "this is a test" 
    }
};

function get(obj, desc) {
    var arr = desc.split(".");
    while(arr.length && (obj = obj[arr.shift()]));
    return obj;
}

function replaceTokens(HTML) {
    return HTML.split('{{').map(function(i) { 
        var symbol = i.substring(0, i.indexOf('}}')).trim(); 
        return i.replace(symbol + '}}', get(translations, symbol)); 
    }).join('');
}

关于Javascript 更快地替换 HTML 代码中的 "variables",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32150429/

相关文章:

javascript - 将 P5 草图作为截面背景

html - 嵌套类 In Html, Css styling Of innermost class

regex - 如果特定字符串不存在,nginx 正则表达式重定向

java - 在带分隔符的字符串中查找并删除子字符串(开始 : 55555, 结束:\n)

javascript - 如何在 emberjs View 中处理 twitter bootstrap 按钮加载和重置

javascript - Node.js promise 不强制函数的顺序执行

javascript - Ng-click - 如何对行为进行单元测试

html - itemprop=图片元素上的 url 属性未验证

Java 正则表达式 : Why is the non-capturing group captured?

javascript - angularjs - 有条件地显示/隐藏输入字段