浅谈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 相关文章推荐
Code:loadScript( )加载js的功能函数
Feb 02 Javascript
js中各浏览器中鼠标按键值的差异
Apr 07 Javascript
JSON辅助格式化处理方法
Mar 26 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
Apr 25 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
Nov 28 Javascript
jQuery修改CSS伪元素属性的方法
Jul 30 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
Jan 12 Javascript
JavaScript实现动态添加Form表单元素的方法示例
Aug 14 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
Dec 18 Javascript
jsonp跨域获取数据的基础教程
Jul 01 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
Jul 03 Javascript
javascript中可能用得到的全部的排序算法
Mar 05 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 表单验证实现代码
2009/03/10 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
javascript每日必学之封装
2016/02/23 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
Python使用ftplib实现简易FTP客户端的方法
2015/06/03 Python
Python版名片管理系统
2018/11/30 Python
python读写配置文件操作示例
2019/07/03 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
python多任务之协程的使用详解
2019/08/26 Python
python中必要的名词解释
2019/11/20 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
canvas裁剪clip()函数的具体使用
2018/03/01 HTML / CSS
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
超市营业员求职简历的自我评价
2013/10/17 职场文书
传播学专业毕业生自荐信
2013/11/04 职场文书
交通法规咨询中心工作职责
2013/11/27 职场文书
市场推广策划方案
2014/06/02 职场文书
计算机网络专业求职信
2014/06/05 职场文书
职业规划实施方案
2014/06/10 职场文书
小学课外活动总结
2014/07/09 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
聘任书范文大全
2015/09/21 职场文书
Nginx配置https的实现
2021/11/27 Servers
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server