HTML+CSS入门 如何利用模板将HTML从JavaScript中抽离
沉沙 2018-06-08 来源 : 阅读 2039 评论 0

摘要:本篇文章讲解了如何利用模板将HTML从JavaScript中抽离,希望阅读本篇文章以后大家有所收获,帮助大家对HTML+CSS的理解更加深入。

一、当需要注入大段的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的APIfunction loadDialog(name, oncomplete) {
    Y.one('#dlg-holder').log('/js/dialog/'+name,oncomplete);
}//使用JQuery的APIfunction 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');

 

本文由职坐标整理发布,更多相关内容,请关注职坐标WEB前端HTML/CSS频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved