浅谈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脚本特性
Sep 13 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
Oct 23 Javascript
JS辨别访问浏览器判断是android还是ios系统
Aug 19 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
May 12 Javascript
js canvas实现擦除动画
Jul 16 Javascript
全面了解函数声明与函数表达式、变量提升
Aug 09 Javascript
输入框点击时边框变色效果的实现方法
Dec 26 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
Feb 26 Javascript
说说Vuex的getters属性的具体用法
Apr 15 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
Jul 19 Javascript
原生js 实现表单验证功能
Feb 08 Javascript
React Native项目框架搭建的一些心得体会
May 28 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
使用php测试硬盘写入速度示例
2014/01/27 PHP
php读取csv数据保存到数组的方法
2015/01/03 PHP
jQuery 使用手册(五)
2009/09/23 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
Vue项目中使用mock.js的完整步骤
2021/01/12 Vue.js
Python列表生成器的循环技巧分享
2015/03/06 Python
用Python创建声明性迷你语言的教程
2015/04/13 Python
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
Python用for循环实现九九乘法表
2018/05/31 Python
Python整数对象实现原理详解
2019/07/01 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
什么是组件架构
2016/05/15 面试题
思想汇报范文
2013/11/04 职场文书
企划经理的岗位职责
2013/11/17 职场文书
土木工程专业推荐信
2014/02/19 职场文书
维稳工作情况汇报
2014/10/27 职场文书
自荐信模板大全
2015/03/27 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
详解 TypeScript 枚举类型
2021/11/02 Javascript