当前位置:首页 > JavaScript

js实现 template

2026-03-14 17:45:39JavaScript

实现模板引擎的基本方法

在JavaScript中实现模板引擎可以通过多种方式完成,以下是一些常见的方法:

字符串替换法 使用字符串的replace方法配合正则表达式进行简单替换:

function render(template, data) {
  return template.replace(/\{\{(\w+)\}\}/g, (match, key) => data[key] || '');
}

Function构造函数法 通过动态生成函数来实现更复杂的模板逻辑:

function compile(template) {
  const evalExpr = /<%=(.+?)%>/g;
  const expr = /<%([\s\S]+?)%>/g;

  template = template
    .replace(evalExpr, '`); \n echo( $1 ); \n echo(`')
    .replace(expr, '`); \n $1 \n echo(`');

  template = 'echo(`' + template + '`);';

  const script =
  `(function parse(data) {
    let output = "";
    function echo(html) {
      output += html;
    }
    ${template}
    return output;
  })`;

  return new Function('data', script);
}

使用ES6模板字符串

现代JavaScript可以利用模板字符串的特性实现模板渲染:

function render(template, data) {
  return new Function('data', `return \`${template}\``)(data);
}

实现条件判断和循环

更高级的模板引擎需要支持逻辑控制:

function compile(template) {
  const tokens = template.split(/(<%[\s\S]*?%>)/g);

  let code = 'let output = "";\n';
  tokens.forEach(token => {
    if (token.startsWith('<%=')) {
      code += `output += ${token.slice(3, -2)};\n`;
    } else if (token.startsWith('<%')) {
      code += `${token.slice(2, -2)}\n`;
    } else {
      code += `output += \`${token}\`;\n`;
    }
  });
  code += 'return output;';

  return new Function('data', code);
}

安全考虑

实现模板引擎时需要注意XSS防护:

function escapeHtml(unsafe) {
  return unsafe
    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;")
    .replace(/"/g, "&quot;")
    .replace(/'/g, "&#039;");
}

function safeRender(template, data) {
  return render(template, {
    ...data,
    _: escapeHtml
  });
}

性能优化

对于频繁使用的模板可以预编译:

js实现 template

const cache = {};
function compileAndCache(template) {
  if (!cache[template]) {
    cache[template] = compile(template);
  }
  return cache[template];
}

以上方法展示了从简单到复杂的JavaScript模板引擎实现方式,可以根据具体需求选择合适的实现方案。

标签: jstemplate
分享给朋友:

相关文章

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js 多选 实现

js 多选 实现

实现多选的 JavaScript 方法 使用复选框(Checkbox)实现多选 通过 HTML 的 checkbox 元素配合 JavaScript 实现多选功能。用户可以选择多个选项,提交时获取所有…

vue js实现弹窗

vue js实现弹窗

Vue.js 实现弹窗的方法 使用组件实现弹窗 创建一个独立的弹窗组件,例如 Modal.vue,包含弹窗的 HTML 结构和样式。在组件中定义 props 控制弹窗的显示与隐藏。 <temp…

vue.js实现异步

vue.js实现异步

Vue.js 实现异步的方法 Vue.js 提供了多种方式来处理异步操作,以下是常见的实现方法: 使用 async/await 语法 在 Vue 组件的方法中,可以使用 async/await 来简…

vue.js实现loading

vue.js实现loading

实现全局Loading组件 在Vue.js中可以通过自定义组件实现全局Loading效果。创建一个独立的Loading组件,通过Vue的插件机制全局注册。 创建Loading组件 <temp…