浅谈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 相关文章推荐
js下用gb2312编码解码实现方法
Dec 31 Javascript
JQuery里选择超链接的实现代码
May 22 Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
Jul 31 Javascript
javascript控制swfObject应用介绍
Nov 29 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
Feb 26 Javascript
利用JavaScript检测CPU使用率自己写的
Mar 22 Javascript
js实现匹配时换色的输入提示特效代码
Aug 17 Javascript
JavaScript保留关键字汇总
Dec 01 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
Jun 17 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
Jul 02 Javascript
vue-cli的工程模板与构建工具详解
Sep 27 Javascript
Vue.Draggable实现交换位置
Apr 07 Vue.js
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
PR值查询 | PageRank 查询
2006/12/20 PHP
理解php原理的opcodes(操作码)
2010/10/26 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
详解JavaScript中Hash Map映射结构的实现
2016/05/21 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
Django框架的中的setting.py文件说明详解
2018/10/15 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
python实现H2O中的随机森林算法介绍及其项目实战
2019/08/29 Python
python创建学生管理系统
2019/11/22 Python
flask框架蓝图和子域名配置详解
2020/01/25 Python
Python selenium自动化测试模型图解
2020/04/15 Python
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
体育专业个人求职信范文
2013/12/27 职场文书
DIY手工制作经营店创业计划书
2014/02/01 职场文书
医学院毕业生自荐信范文
2014/03/06 职场文书
幼儿园植树节活动总结
2014/07/04 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
2015中秋祝酒词
2015/08/12 职场文书
高三语文教学反思
2016/02/16 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
python基础之模块的导入
2021/10/24 Python