浅谈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 相关文章推荐
在JavaScript中监听IME键盘输入事件
May 29 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
Mar 03 Javascript
javascript中CheckBox全选终极方案
May 20 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
Jul 10 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
Aug 05 Javascript
Bootstrap和Java分页实例第二篇
Dec 23 Javascript
jQuery图片缩放插件smartZoom使用实例详解
Aug 25 jQuery
vue 使用axios 数据请求第三方插件的使用教程详解
Jul 05 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
Aug 08 Javascript
使用p5.js临摹动态图形
Oct 23 Javascript
bootstrap-paginator服务器端分页使用方法详解
Feb 13 Javascript
微信小程序实现发微博功能的示例代码
Jun 24 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
我的论坛源代码(九)
2006/10/09 PHP
Yii2中Restful API原理实例分析
2016/07/25 PHP
解决Laravel5.5下的toArray问题
2019/10/15 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
three.js快速入门【推荐】
2017/01/21 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
python实现斐波那契递归函数的方法
2014/09/08 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
使用python3.5仿微软记事本notepad
2016/06/15 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
基于Django实现日志记录报错信息
2019/12/17 Python
Python异步编程之协程任务的调度操作实例分析
2020/02/01 Python
python读取mysql数据绘制条形图
2020/03/25 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
函授毕业生的自我鉴定
2013/11/26 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
Oracle笔记
2021/04/05 Oracle
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
使用python绘制横竖条形图
2022/04/21 Python