模板介绍

1、必要性:ajax请求从服务器接收到大量数据,此时再用普通的字符串拼接是很耗费时间的,这时候模板就有其必要性

2、便利性:插件套用,现在有很多主流的模板插件:BaiduTemplate(百度开发) 、ArtTemplate(腾讯开发)、 velocity.js(淘宝开发) Handlebars

基本逻辑

1、script标签的type类型不能是默认的,改成text/template,这样就可以作为一个模板而不会被执行了

2、读取模板内的innerHTML

3、正则

4、正则中的exec方法不断的验证模板中是否有匹配的数据,()括号中的子项是键

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <script type="text/template" id="template">
<ul>
<li><%= name %></li>
<li><%= age %></li>
<li><%= skill %></li>
</ul>
</script>
<script>
var tempStr=document.querySelector("#template").innerHTML;
var obj={name:'wq',age:17,skill:'eat'};
var str=fox_template_pro(tempStr,obj);
document.write(str);
/*
str:模板
obj:准备替换的数据
*/
function fox_template_pro(str, obj) {
var reg = /<%=\s*([^%>]+\S)\s*%>/;// 中间的 小括号 可以对 正则 筛选出来的 字符串 再次筛选
var str = str;// 准备挖好坑的字符串
var obj = obj;// 准备 用来填坑的 对象
/*
第一个 <%= name %> 索引为0
第二个 name 索引为1
*/
var result;
while (result = reg.exec(str)) {
var key = result[1];// 获取匹配的key
var value = obj[key];// 通过key获取value
str = str.replace(result[0], value);// 替换的是<%= name %>
}
return str;//执行完毕说明替换完成了
}
</script>
</body>
</html>

腾讯模板

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title> </head>
<body>
<script src="js/template-native.js"></script>
<script type="text/template" id="template">
<ul>
<li><%=name%></li>
<li><%=age%></li>
<li><%=skill%></li>
<li>
<ul>
<%for (var i = 0; i < food.length; i++) {%>
<li><%=food[i]%></li>
<%}%>
</ul>
</li>
</ul>
</script>
<script>
var obj = {
name: 'wq',
age: 18,
skill: 'eat',
food: ['米饭', '土豆丝', '番茄', '花生', '玉米']
};
/*
参数1: 模板ID
参数2: 替换数据
*/
var resultStr = template('template',obj);
document.write(resultStr);
</script>
</body>
</html>

注意事项

1、接收数据单单是数组,必须包裹在对象中传入template方法

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script src="js/template-native.js"></script>
<script type="text/template" id="template">
<ul>
<li>
<ul>
<%for (var i = 0; i < info.length; i++) {%>
<li><%=info[i]%></li>
<%}%>
</ul>
</li>
</ul>
</script>
<script>
var ajax = new XMLHttpRequest();
ajax.open('get','10.php');
ajax.send();
ajax.onreadystatechange=function (ev) {
if (ajax.readyState==4&&ajax.status==200) {
var arr=JSON.parse(ajax.responseText);
console.log(arr);
var obj={info:arr};
var resultStr=template('template',obj);
document.write(resultStr);
}
}
</script>
</body>
</html>
<?php
header("content-type:text/html;charset=utf-8");
echo file_get_contents('files/04.json');
?>
["wq",17,"eat"]

2、接收数据是字符串,可以用[]括起来,然后包裹在对象中传入template方法

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script src="js/template-native.js"></script>
<script type="text/template" id="template">
<ul>
<li>
<ul>
<%for (var i = 0; i < info.length; i++) {%>
<li><%=info[i]['name']%></li>
<li><%=info[i]['age']%></li>
<li><%=info[i]['sex']%></li>
<%}%>
</ul>
</li>
</ul>
</script>
<script>
var ajax = new XMLHttpRequest();
ajax.open('get','10.php');
ajax.send();
ajax.onreadystatechange=function (ev) {
if (ajax.readyState==4&&ajax.status==200) {
var arr=JSON.parse(ajax.responseText);
console.log(arr);
var obj={info:[arr]};
var resultStr=template('template',obj);
document.write(resultStr);
}
}
</script>
</body>
</html>
<?php
header("content-type:text/html;charset=utf-8");
echo file_get_contents('files/05.json');
?>
{"name":"zs1","age":,"sex":"nan"}

最新文章

  1. MongoDB安装配置示例
  2. TextView实现歌词同步
  3. mac自定义安装nodejs步骤
  4. Eclipse下Tomcat插件的安装
  5. 搜索+剪枝 POJ 1416 Shredding Company
  6. python学习笔记二--列表的使用
  7. OTCBTC上线币币交易
  8. css 选择器符号
  9. CURL错误代码及含义
  10. pytorch 中的重要模块化接口nn.Module
  11. java可变参数长度
  12. nginx:负载均衡实战(二) keepalived入门
  13. 用php和ajax写一个省市区的三级联动,实现地区的下拉选择
  14. kibana显示报错
  15. ajax-原理分析
  16. 工具篇:使用natapp工具映射内网到外网访问
  17. python+opencv+pyqt5控制摄像头在Qlabel上显示
  18. oracle无监听程序的解决方法(PLSQL)Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务
  19. winform中文本框添加拖拽功能
  20. UESTC - 1652 递推方程

热门文章

  1. C++ - 一个构造函数调用构造函数的问题
  2. 1048 石子归并codevs
  3. v$log and v$logfiles
  4. Android: 阻止ScrollView随着数据加载自动滚动
  5. 最全Pycharm教程(37)——Pycharm版本号控制之基础篇
  6. [PsTools]psexec.exe使用范例-运行远程电脑程序(exe、bat等)
  7. 常用样式制作思路 自定义按钮~自适应布局~常见bug seajs简记 初学者必知的HTML规范 不容忽略的——CSS规范
  8. common upload乱码
  9. code+3月赛 loj6299 白金元首与克劳德斯
  10. allonsy