js模板字符串中执行函数方法

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    table {
      padding: 0;
      margin: 0;
    }

    table tr th,
    table tr td {
      border: 1px solid #C1DAD7;
      background: #fff;
      padding: 6px 6px 6px 12px;
      color: #4f6b72;
    }
  </style>
</head>

<body>
  <div id="app"></div>

  <script type="template/javascript" id="template">
    <table>
      <tr>
        <th>id</th>
        <th>名称</th>
        <th>年龄</th>
        <th>日期</th>
        <th>日期1</th>
      </tr>
      <tr>
        <td id="u{{id}}">{{id}}</td>
        <td title="{{name}}">{{name}}</td>
        <td title="{{age}}">{{age}}</td>
        <td title="{{today()}}">{{today()}}</td>
        <td title="{{today(-1)}}">{{today(-1)}}</td>
      </tr>
    </table>
  </script>
  <script>
    /*
     * day: Number,自定义前后天数
     */
    function today(day) {
      var tday = new Date() // 获取今天的日期
      tday.setDate(tday.getDate() + (day || 0))
      return tday.getFullYear() + '-' + (tday.getMonth() + 1) + '-' + tday.getDate()
    }

    function checkStr(str) {
      var pattern = new RegExp("[()]")
      if (pattern.test(str)) {
        return true
      }
      return false
    }

    // 在ES6中 是有字符串模板的 但是ES6之前呢?
    // 获取元素
    var template = document.getElementById("template");
    var tpl = template.innerText;
    // 结合对象: 
    var user = {
      id: "1234",
      name: "tony"
    };

    var str = tpl.replace(/{{(.*?)}}/g, function (match, $1) {
      if (checkStr($1)) {
        return eval($1)
      }
      return user[$1];
    });

    var app = document.getElementById("app");
    app.innerHTML = str
    // console.log(str)
    //   变为: 
    // `<table>
    //     <tr>
    //         <td id="u1234">1234</td>
    //         <td title="tony">tony</td>
    //     </tr>
    // </table>`
  </script>
</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值