当前位置:首页 > JavaScript

js实现template功能

2026-02-02 13:18:39JavaScript

实现基础模板替换

使用字符串替换是最简单的方式,通过正则表达式匹配占位符并替换为实际值。以下是一个基础实现:

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

const template = 'Hello, {{name}}! Today is {{day}}.';
const data = { name: 'Alice', day: 'Monday' };
console.log(renderTemplate(template, data)); 
// 输出: "Hello, Alice! Today is Monday."

支持嵌套对象访问

扩展基础功能以支持对象嵌套访问,使用点号分隔路径:

function renderTemplate(template, data) {
  return template.replace(/\{\{([\w\.]+)\}\}/g, (match, path) => {
    return path.split('.').reduce((obj, key) => {
      return (obj && obj[key] !== undefined) ? obj[key] : '';
    }, data);
  });
}

const template = 'User: {{user.name}}, Age: {{user.age}}';
const data = { user: { name: 'Bob', age: 25 } };
console.log(renderTemplate(template, data));
// 输出: "User: Bob, Age: 25"

添加条件逻辑支持

通过自定义语法实现简单的条件判断,例如 {{#if condition}}...{{/if}}

function renderTemplate(template, data) {
  // 处理条件块
  const ifPattern = /\{\{#if (\w+)\}\}(.*?)\{\{\/if\}\}/gs;
  template = template.replace(ifPattern, (match, condition, content) => {
    return data[condition] ? content : '';
  });

  // 处理普通替换
  return template.replace(/\{\{(\w+)\}\}/g, (match, key) => {
    return data[key] || '';
  });
}

const template = '{{#if show}}Welcome!{{/if}} {{name}}';
const data = { show: true, name: 'Charlie' };
console.log(renderTemplate(template, data));
// 输出: "Welcome! Charlie"

实现循环功能

支持数组循环渲染,使用类似 {{#each items}}...{{/each}} 的语法:

function renderTemplate(template, data) {
  // 处理循环块
  const eachPattern = /\{\{#each (\w+)\}\}(.*?)\{\{\/each\}\}/gs;
  template = template.replace(eachPattern, (match, arrayName, content) => {
    const items = data[arrayName] || [];
    return items.map(item => {
      return content.replace(/\{\{\.\}\}/g, item);
    }).join('');
  });

  // 处理普通替换
  return template.replace(/\{\{(\w+)\}\}/g, (match, key) => {
    return data[key] || '';
  });
}

const template = '{{#each fruits}}{{.}} {{/each}}';
const data = { fruits: ['Apple', 'Banana', 'Cherry'] };
console.log(renderTemplate(template, data));
// 输出: "Apple Banana Cherry "

使用Function构造函数实现动态模板

对于更复杂的场景,可以使用Function构造函数动态生成渲染函数:

function compileTemplate(template) {
  const body = "let result = '';\n" +
    template.replace(/\{\{(\w+)\}\}/g, (match, key) => {
      return `result += ${key};\n`;
    }) +
    'return result;';

  return new Function(...Object.keys(data), body);
}

const template = '{{greeting}}, {{name}}!';
const data = { greeting: 'Hello', name: 'Dave' };
const render = compileTemplate(template);
console.log(render(data.greeting, data.name));
// 输出: "Hello, Dave!"

js实现template功能

标签: 功能js
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

vue实现ping功能

vue实现ping功能

实现Ping功能的思路 在Vue中实现Ping功能通常需要借助浏览器API或后端服务。由于浏览器环境限制,无法直接发送ICMP请求(传统Ping协议),但可通过以下两种方式模拟: HTTP请求模拟P…

vue实现审核功能

vue实现审核功能

实现审核功能的基本思路 审核功能通常涉及状态管理、权限控制和操作记录。Vue中可以通过组件化设计、状态管理库(如Vuex或Pinia)和后端API配合实现。 审核状态管理 使用Vuex或Pinia…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前…