浅谈javascript中自定义模版


Posted in Javascript onJanuary 29, 2015
/**
 * Created by Administrator on 15-1-19.
 */
function functionUtil() {
}
functionUtil = {
  //某个DOM节点是否有某个属性
  hasAttr: function (el, name) {
    var attr = el.getAttributeNode && el.getAttributeNode(name);
    return attr ? attr.specified : false
  },
  //根据class获取元素
  getByClass: function (sClass, oParent) {
    oParent = oParent || document;
    if (!oParent.getElementsByClassName) {
      return oParent.getElementsByClassName(sClass);
    }
    var arr = [];
    var aEle = oParent.getElementsByTagName('*');
    var reg = new RegExp('(^|\\s)' + sClass + '(\\s|$)');
    //var reg = new RegExp('(^|[\\x20\\t\\r\\n\\f])' + sClass + '([\\x20\\t\\r\\n\\f]|$)');
    for (var i = 0; i < aEle.length; i++) {
      if (reg.test(aEle[i].className)) {
        arr.push(aEle[i]);
      }
    }
    return arr;
  },
  //动态添加样式表
  addSheetFile: function (path) {
    var fileref = document.createElement("link")
    fileref.rel = "stylesheet";
    fileref.type = "text/css";
    fileref.href = path;
    fileref.media = "screen";
    var headobj = document.getElementsByTagName('head')[0];
    headobj.appendChild(fileref);
  },
  //根据指定格式如 ${name} 绑定json数据
  LoadJsonData: function (sParent, oJson) {
    var oParent = document.getElementById(sParent);
    if (oJson instanceof Array) {
      var str = oParent.innerHTML;
      for (var i = 0; i < oJson.length - 1; i++) {
        oParent.innerHTML += str;
      }
      for (var d in oJson) {
        oParent.children[d].innerHTML = oParent.children[d].innerHTML.replace(/\$\{(\w+)\}/g, function (str, $1) {
          return oJson[d][$1] ? oJson[d][$1] : '';
        });
      }
    } else {
      oParent.innerHTML = oParent.innerHTML.replace(/\$\{(\w+)\}/g, function (str, $1) {
        return oJson[$1] ? oJson[$1] : '';
      });
    }
  },
  //根据指定格式如<%……%>绑定json数据
  TemplateEngine: function (html, options) {
    html = html.replace(/(>)|(<)/g, function (str, $1, $2) {
      switch (str) {
        case $1:
          return '>';
        case $2:
          return '<';
      }
    });
    var re = /<%([^%>]+)?%>/g, reExp = /(^( )?(if|for|else|switch|case|break|{|}))(.*)?/g, code = 'var r=[];\n', cursor = 0;
    var add = function (line, js) {
      js ? (code += line.match(reExp) ? line + '\n' : 'r.push(' + line + ');\n') :
        (code += line != '' ? 'r.push("' + line.replace(/"/g, '\\"') + '");\n' : '');
      return add;
    }
    while (match = re.exec(html)) {
      add(html.slice(cursor, match.index))(match[1], true);
      cursor = match.index + match[0].length;
    }
    add(html.substr(cursor, html.length - cursor));
    code += 'return r.join("");';
    return new Function(code.replace(/[\r\t\n]/g, '')).apply(options);
  }
}

1、第一种方式:${key}

functionUtil.LoadJsonData(element, data);

”html“代码:

<div id="data">
  <div class="item">
    姓名:${name}<br/>
    年龄:${age}<br/>
    职业:${job}<br/><br/>
  </div>
</div>

javascript代码:

var data = [
      {
          name: '徐磊',
          age: 24,
          job: 'IT'
        },
        {
          name: '李磊',
          age: 23,
          job: '翻译'
        }
  ];


functionUtil.LoadJsonData('data', data);

执行结果:

浅谈javascript中自定义模版

2、第二种方式<% 代码 %>

functionUtil.TemplateEngine(string,Object);

"html"代码:

<div id="test3">
  <%if(this.isShow){
   for(var i in this.data){%>
    <p href="#">姓名:<%this.data[i].name%></p>

    <p href="#">年龄:<%this.data[i].age%></p>

    <p href="#">工作:<%this.data[i].job%></p>
    <br/>
  <%}}%>
</div>

javascript代码:

var person = {
        data: [
          {
            name: '徐磊',
            age: 24,
            job: 'IT'
          },
          {
            name: '李磊',
            age: 23,
            job: '翻译'
          }
        ],
        isShow: true
      }


  document.getElementById("test3").innerHTML = functionUtil.TemplateEngine(document.getElementById("test3").innerHTML, person);

结果:

浅谈javascript中自定义模版

以上就是本文的全部内容了,小伙伴们看完是否对javascript模板有了新的认识了呢,希望大家能够喜欢。

Javascript 相关文章推荐
jQuery之ajax技术的详细介绍
Jun 19 Javascript
jquery操作select大全
Apr 25 Javascript
Node.js插件的正确编写方式
Aug 03 Javascript
JavaScript计时器示例分析
Feb 05 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
Apr 15 Javascript
JavaScript中localStorage对象存储方式实例分析
Jan 12 Javascript
关于 angularJS的一些用法
Nov 29 Javascript
一个简单的node.js界面实现方法
Jun 01 Javascript
Vuex入门到上手教程
Jun 20 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
Nov 11 Javascript
Node.js实现简单管理系统
Sep 23 Javascript
js实现数字跳动到指定数字
Aug 25 Javascript
jQuery和AngularJS的区别浅析
Jan 29 #Javascript
node.js中的forEach()是同步还是异步呢
Jan 29 #Javascript
Node.js事件循环(Event Loop)和线程池详解
Jan 28 #Javascript
使用Sticker.js实现贴纸效果
Jan 28 #Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
Jan 28 #Javascript
7个让JavaScript变得更好的注意事项
Jan 28 #Javascript
简单谈谈javascript代码复用模式
Jan 28 #Javascript
You might like
浅析php单例模式
2014/11/25 PHP
深入php内核之php in array
2015/11/10 PHP
在JavaScript中使用inline函数的问题
2007/03/08 Javascript
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
一个可复用的vue分页组件
2017/05/15 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
了解JavaScript中的选择器
2019/05/24 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
在Linux系统上部署Apache+Python+Django+MySQL环境
2015/12/24 Python
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
用CSS3实现无限循环的无缝滚动的示例代码
2017/11/01 HTML / CSS
巧用HTML5给按钮背景设计不同的动画简单实例
2016/08/09 HTML / CSS
大学生毕业自我鉴定
2013/11/06 职场文书
酒店总经理助理岗位职责
2014/02/01 职场文书
鲜花方阵解说词
2014/02/13 职场文书
技能比赛获奖感言
2014/02/14 职场文书
施工员岗位职责
2014/03/16 职场文书
市场营销毕业求职信
2014/08/07 职场文书
工作检讨书范文
2015/01/23 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
创业计划书之旅游网站
2019/09/06 职场文书
MySQL普通表如何转换成分区表
2022/05/30 MySQL