当前位置:首页 > 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构造函数法 通过动态生成函数来实现更复杂的模板逻辑:

js实现 template

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);
}

实现条件判断和循环

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

js实现 template

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
  });
}

性能优化

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

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

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

标签: jstemplate
分享给朋友:

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…