浅谈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 相关文章推荐
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
Nov 11 Javascript
JS弹出对话框返回值代码(asp.net后台)
Dec 28 Javascript
在多个页面使用同一个HTML片段《续》
Mar 04 Javascript
js获取height和width的方法说明
Jan 06 Javascript
jQuery编程中的一些核心方法简介
Aug 14 Javascript
javascript编程异常处理实例小结
Nov 30 Javascript
一篇文章掌握RequireJS常用知识
Jan 26 Javascript
JSON字符串和对象相互转换实例分析
Jun 16 Javascript
浅析JavaScript中var that=this
Feb 17 Javascript
layui之select的option叠加问题的解决方法
Mar 08 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
Jun 05 Javascript
openlayers4.6.5实现距离量测和面积量测
Sep 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
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
js计数器代码
2006/11/04 Javascript
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
Div Select挡住的解决办法
2008/08/07 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
vue实现单选和多选功能
2017/08/11 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
vue中的过滤器实例代码详解
2019/06/06 Javascript
jQuery实现轮播图源码
2019/10/23 jQuery
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
低版本中Python除法运算小技巧
2015/04/05 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
美国第一香水网站:Perfume.com
2017/01/23 全球购物
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
医药代表个人的求职信分享
2013/12/08 职场文书
师德个人剖析材料
2014/02/02 职场文书
学校先进集体事迹材料
2014/05/31 职场文书
物业保洁员管理制度
2015/08/05 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP
Java 数组内置函数toArray详解
2021/06/28 Java/Android
python标准库ElementTree处理xml
2022/05/20 Python