⭐️ 本文首发自 前端修罗场(点击加入),是一个由 资深开发者 独立运行 的专业技术社区,我专注 Web 技术、Web3、区块链、答疑解惑、面试辅导以及职业发展博主创作的 《前端面试复习笔记》(点击订阅),广受好评,已帮助多人提升实力、拿到 offer。现在订阅,私聊我即可获取一次免费的模拟面试机会,帮你评估知识点的掌握程度,获得更全面的学习指导意见!

模板引擎在前后端都能用到,但是通过作为前端,我们只需要一些简单的模板引擎。

先上代码:

<!DOCTYPE html>
<html>
<head><title>模板引擎</title>
</head>
<body><div id="tpl" type="text/plain"><p>Today: { date }</p><a href="/{ user.id|safe }">{ user.company }</a></div><script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script><script type="text/javascript">var tpl = new Template($('#tpl').html());var date= new Date();var model = tpl.render({date: date,user: {id: '0000',company: 'babybus'}});$('#tpl').html(model);function Template(tpl) {varfn,match,code = ['var r=[];\nvar _html = function (str) { return str.replace(/&/g, \'&amp;\').replace(/"/g, \'&quot;\').replace(/\'/g, \''\').replace(/</g, \'&lt;\').replace(/>/g, \'&gt;\'); };'],re = /\{\s*([a-zA-Z\.\_0-9()]+)(\s*\|\s*safe)?\s*\}/m,addLine = function (text) {code.push('r.push(\'' + text.replace(/\'/g, '\\\'').replace(/\n/g, '\\n').replace(/\r/g, '\\r') + '\');');};while (match = re.exec(tpl)) {if (match.index > 0) {addLine(tpl.slice(0, match.index));}if (match[2]) {code.push('r.push(String(this.' + match[1] + '));');}else {code.push('r.push(_html(String(this.' + match[1] + ')));');}tpl = tpl.substring(match.index + match[0].length);}addLine(tpl);code.push('return r.join(\'\');');fn = new Function(code.join('\n'));this.render = function (model) {return fn.apply(model);};}</script></body>
</html>

这个我们能用这个模板引擎创建一个我们前端需要的html片段了。

这里面我们使用正则表达式去匹配字符串中的变量,当然,你要对js正则表达式熟练应用。

【Javascript】用 js 写一个模板引擎相关推荐

  1. 不用正则表达式,用javascript从零写一个模板引擎(一)

    前言 模板引擎的作用就是将模板渲染成html,html = render(template,data),常见的js模板引擎有Pug,Nunjucks,Mustache等.网上一些制作模板引擎的文章大部 ...

  2. 用js写一个模板引擎

    模板引擎在前后端都能用到,但是通过作为前端,我们只需要一些简单的模板引擎. 先上代码: <code class="hljs xml has-numbering" style= ...

  3. 说说如何用JavaScript实现一个模板引擎

    前言 不知不觉就很长时间没造过什么轮子了,以前一直想自己实现一个模板引擎,只是没付诸于行动,最近终于在业余时间里抽了点时间写了一下.因为我们的项目大部分用的是 swig 或者 nunjucks ,于是 ...

  4. Jade —— 源于 Node.js 的 HTML 模板引擎

    2013-12-11 发布 Jade -- 源于 Node.js 的 HTML 模板引擎 开源项目介绍 web 模板引擎 node.js jade 207.8k 次阅读  ·  读完需要 69 分钟 ...

  5. 仿vue.js实现简单模板引擎(2kB)

    仿vue.js实现简单模板引擎(2kB) 点击预览 index.html <!DOCTYPE html> <html lang="zh-CN"> <h ...

  6. 【Part2】用JS写一个Blog (node + vue + mongoDB)

    [Part1]用JS写一个Blog (node + vue + mongoDB) 上一节前后端项目分别初始化完成,这一小节我就从后端项目开始写.实现mongoDB数据库的连接. 整理后端目录 下面是通 ...

  7. JS写一个简单的五星评价

    JS写一个简单的五星评价 在做前端网页页面的时候很多时候回有遇到星级评价的模块,用到的地方挺多所以自己就上传下方便大家和自己使用(不支持半星评价因为没有半星的图). 效果图如下: 下面是我们的代码: ...

  8. HTML+CSS+原生JS写一个简易的音乐播放器(仅播放一首歌)

    用HTML+CSS+原生JS写一个简易的音乐播放器(仅播放一首歌) 效果如下:(鼠标点击按钮可以实现播放或暂停,按钮会旋转,实现了歌词同步,功能还需改进) 代码如下: <!DOCTYPE htm ...

  9. js写一个关于内角和的工具

    js写一个关于内角和的工具 今天在刷视频的时候发现了一个关于内角和的视频 这时,我不禁深思 1.内角和是什么玩意儿 2.我初中学过这个吗 答案都是 NO 于是我又仔细的看了下去 视频主要讲了 通过正几 ...

  10. 【javascript】手写一个webpack loder

    [javascript]手写一个webpack loder 手写一个loader 为什么需要loader?  webpack 实际上只能处理js文件,那么对于除了js文件的其他类型的文件 比如 css ...

最新文章

  1. ADSL自动更换IP地址源代码
  2. 解读《信息系统灾难恢复规范》---转
  3. other than ,more than,less than,rather than到底有什么区别
  4. 策略模式的扩展——策略枚举
  5. 通过 Docker 部署 Redis 6.x 集群
  6. 记一次小型生产事故 | BeyondComper跨编码方式复制文件内容
  7. linux查看link 路径,link_path_walk()路径名查找
  8. SQLServer 2012重启服务后,自增1的标识列一次增长了1000左右
  9. nginx反向代理实现直接域名访问
  10. 创维电视盒子导致网络瘫痪诡异事件处理方法(openwrt端口隔离)
  11. 前端基础-html-01
  12. Agens Graph常用语法总结
  13. 华为手机主界面的返回键怎么调出来_华为手机没有返回键怎么调出来
  14. 是什么让一个优秀的派对服饰
  15. 防止 rm -rf / 删根跑路——使用 safe-rm 替代 rm
  16. 根据M3U8文件地址下载网站上的视频
  17. 电力系统数字化转型历史(跨部门系统自建阶段)
  18. 主题 12:实践案例集锦之兜底方案设计
  19. 百战终破黄金甲,不破楼兰终不还!
  20. 零基础的人如何开始学计算机,零基础的人如何学好计算机?

热门文章

  1. chrome插件开发引入图片静态资源
  2. 图片短链接生成器在线
  3. ubuntu18.04: 安装nanomsg
  4. TI深度学习(TIDL)--1
  5. 天池历届大赛答辩PPT及视频
  6. matlab dmc控制代码,动态控制矩阵(DMC)算法的浅析
  7. GIS数据转换器(栅格)(栅格向矢量网格和栅格向栅格的转换)
  8. 大一html网页制作PPT,HTML网页制作.ppt
  9. QNX系统开启telnet远程登录
  10. xps文件服务器端,黑苹果从入门到精通 篇七:XPS 9360完美黑果实战