如何利用模板将HTML从JavaScript中抽离


Posted in Javascript onOctober 08, 2016

一、当需要注入大段的HTML标签到页面中时,应该使用服务器渲染(从服务器加载HTML标签)

该方法将模板放置于服务器中使用XMLHttpRequest对象来获取外部标签(如多页应用)

function loadDialog(name, oncomplete) {
 var xhr = new XMLHttpRequest();
 xhr.open('get', '/js/dialog/'+name, true);
 xhr.onreadystatechange = function () {
  if(xhr.readyState == 4 && xhr.status == 200){
   var div = document.getElementById('dlg-holder');
   div.innerHTML = xhr.responseText;
   oncomplete();
  }else {
   //错误处理代码
  }
 };
 xhr.send(null);
}
//使用YUI的API
function loadDialog(name, oncomplete) {
 Y.one('#dlg-holder').log('/js/dialog/'+name,oncomplete);
}
//使用JQuery的API
function loadDialog(name, oncomplete) {
 $('#dlg-holder').load('/js/dialog/'+name, oncomplete);
}

二、客户端模板
对于少量的标签段,应该考虑采用客户端模板。
客户端模板是一些带‘插槽'(占位符)的标签片段,这些占位符会被JavaScript程序(模板引擎)替换为数据,然后把该替换好的标签片段插入到页面中。

JavaScript程序(模板引擎)
自定义模板文本处理程序

function sprintf(text){
 var i=1,args=arguments;
 return text.replace(/%s/g, function(){
  return (i<args.length) ? args[i++] : '';
 });
}

模板文本存放位置
1.存放于HTML注释中

<ul id = 'mylist'><!--<li id='item%s'><a href='%s'>%s</a></li>-->
 ...
</ul>

因为注释也是一个DOM节点,因此可以通过JS将其提取出来:

//格式化并插入DOM的方法定义
function addItem(url,text){
 var mylist = document.getElementById('mylist');
 var templateText = mylist.firstChild.nodeValue; //提取模板文本
 var result = sprintf(templateText,url,text);
 div.innerHTML = result;
 mylist.insertAdjacentHTML('beforeend', result);
}
//调用方法
addItem('/item/4', 'First item');
addItem('/item/4', 'Second item');

2.存放于自定义type属性的script标签内

<script type='text/x-my-template' id='list-item'>
 <li><a href='%s'>%s</a></li>
</script>
function addItem(url,text){
 var mylist = document.getElementById('mylist');
 var script = document.getElementById('list-item');
 var templateText = script.text; //提取模板文本
 var result = sprintf(templateText,url,text);
 var div = document.createElement('div');
 div.innerHTML = result.replace(/^\s*/,''); //去除模板文本的前导空格(因为它是在<script>标签的下一行)
 mylist.appendChild(div.firstChild);
}

使用第三方的模板系统(如:artTemplate-3.0、Jade、Handlebars、doT.js)

以Handlebars为例:

Handlebars建议将模板存放于script标签内

<script type='text/x-handlebars-template' id='list-item'>
 {{#if items}}
 <ul id='mylist'>
  {{#each items}}
   <li><a href='{{url}}'>{{text}}</a></li>
  {{/each}}
 </ul>
 {{/if}}
</script>
funtion addItem(url,text){
 var mylist = document.getElementById('mylist'),
   script = document.getElementById('list-item'),
   template = Handlebars.compile(script.text), //提取模板文本,返回格式化方法
   div = document.createElement('div'),
   result;

 result = template({text:text,url:url});
 div.innerHTML = result;
 mylist.appendChild(div.firstChild);
}
//调用
addItem('/item/4,'First item');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jQuery的表格操作插件
Apr 22 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
Oct 11 Javascript
通过js简单实现将一个文本内容转译成加密文本
Oct 22 Javascript
jquery制作漂亮的弹出层提示消息特效
Dec 23 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
Mar 25 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
Aug 07 Javascript
深入探究AngularJS框架中Scope对象的超级教程
Jan 04 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
Mar 28 Javascript
利用Node.js对文件进行重命名
Mar 12 Javascript
Vue实现底部侧边工具栏的实例代码
Sep 03 Javascript
使用taro开发微信小程序遇到的坑总结
Apr 08 Javascript
vue中英文切换实例代码
Jan 21 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
Oct 08 #Javascript
bootstrap下拉列表与输入框组结合的样式调整
Oct 08 #Javascript
Bootstrap字体图标无法正常显示的解决方法
Oct 08 #Javascript
Javascript中常用的检测方法小结
Oct 08 #Javascript
微信小程序 前端源码逻辑和工作流详解
Oct 08 #Javascript
AngularJS 2.0入门权威指南
Oct 08 #Javascript
省市区三级联动jquery实现代码
Apr 15 #Javascript
You might like
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
jQuery的三种$()
2009/12/30 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
javascript实现数独解法
2015/03/14 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
JavaScript多线程详解
2015/08/12 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
vue实现未登录跳转到登录页面的方法
2018/07/17 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
微信小程序自定义弹窗实现详解(可通用)
2019/07/04 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
python简单实现获取当前时间
2016/08/27 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
python批量下载抖音视频
2019/06/17 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
精选奢华:THE LIST
2019/09/05 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
基层干部十八大感言
2014/01/19 职场文书
学生会干部自荐信
2014/02/04 职场文书
自愿离婚协议书范文2014
2014/10/12 职场文书
采购内勤岗位职责
2015/04/13 职场文书
Python破解极验滑动验证码详细步骤
2021/05/21 Python