template模板字符串

template模板字符串underscore 自定义书写 template 模板字符串

在AJAX请求回数据之后,我们要将这些数据渲染到页面DOM树上。此时,我们有三种方式:

1. 创建元素

最最基本的方法

// 1 创建h2 var h2 = document.createElement("h2"); // 2 创建div var div = document.createElement("div"); // 3 设置innerHTML h2.innerHTML = arr[i].title; // 4 设置innerHTML div.innerHTML = arr[i].log; // 5 添加到li中 li.appendChild(h2); // 6 添加到li中 li.appendChild(div); // 以上代码可行,但是略繁琐,而且上树次数太多会引起多次重绘和回流。会影响效率。

2. 单行字符串拼接

将所有的html元素,看成一个元素的内部文案,这样就将“创建元素”这个行为转变成“拼接字符串”。

str += "

" + arr[i].title + "

" + arr[i].log + "
";

此种方式,在dom结构简单的时候可行, 但是当要上树的dom结构复杂的时候,单行字符串拼接很可能会看不清楚标签的嵌套关系,修改不方便

3. template模板字符串

underscore使用template模板字符串

template_.template(templateString, [settings]) 

将 JavaScript 模板编译为可以用于页面呈现的函数, 对于通过JSON数据源生成复杂的HTML并呈现出来的操作非常有用。 模板函数可以使用 <%= … %>插入变量, 也可以用<% … %>执行任意的 JavaScript 代码。 如果您希望插入一个值, 并让其进行HTML转义,请使用<%- … %>。 当你要给模板函数赋值的时候,可以传递一个含有与模板对应属性的data对象 。 如果您要写一个一次性的, 您可以传对象 data 作为第二个参数给模板 template 来直接呈现, 这样页面会立即呈现而不是返回一个模板函数. 参数 settings 是一个哈希表包含任何可以覆盖的设置 _.templateSettings.

var compiled = _.template("hello: <%= name %>"); compiled({name: 'moe'}); => "hello: moe" var template = _.template("<%- value %>"); template({value: '"

自定义方法使用模板字符串,需要三个步骤:

步骤一: 根据最终渲染出的dom结构定义模板字符串

    定义模板的方式:  

        1. 先在真实的dom结构中使用假数据将结构与样式调整完毕。

        2. 将调整完毕的html代码放在一个被改变了type类型无法执行的script标签内(最好是 type=”text/template”)。

        3. 挖空假数据,使用特殊标签将假数据部分代替,并写入字典中目标数据的层级关系。

    例如,underscore中的template模板字符串

        先在真实的dom结构中使用假数据将结构与样式调整完毕

        将调整完毕的html代码放在无法执行的script标签内(type=”text/template”)

        挖空假数据,使用特殊标签<%=%>将假数据部分代替,而且underscore模板字符串中可以使用模板语法

步骤二: 
定义格式化函数

自定义格式化函数

/* * @tpl 字符串模板 * @dic 数据字典 * @return 返回的是格式化好的字符串 */ function format(tpl, dic) { // 将tpl中所有的<%=xxx%>、 <%=xxx.xxx%>、<%=xxx.xxx.xxx%>找出来 // 定义正则表达式 var reg = /<%=((\w+)(\.\w+)*)%>/g; // 替换tpl中符合正则表达式描述的那些内容 return tpl.replace(reg, function(match, $1, $2, $3, $4) { // console.log($1); // $1是字典与模板的层级路径关系 我们需要按照该路径将数据提取出来并返回 // 第一步 按照.分割路径 var arr = $1.split("."); // 备份dic var result = dic; // console.log(arr); // 循环arr 并一层一层往下获取数据 for(var i = 0; i < arr.length - 1; i++) { // 将result指向下一层及 result = result[arr[i]]; } return result[arr[i]]; }); }

步骤三: 
使用格式化函数格式化template,并且添加到DOM结构

var aaa = format(str, data) document.body.innerHTML += aaa;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217792.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午8:45
下一篇 2026年3月18日 上午8:46


相关推荐

  • vs2015更新密钥_vs2017更新到2019

    vs2015更新密钥_vs2017更新到2019参考:https://stackoverflow.com/questions/12465361/how-to-change-visual-studio-2012-2013-or-2015-license-keyhttp://blog.sina.com.cn/s/blog_58c506600101ja49.html搜索注册表编辑器从注册表中找到HKEY_CLASSES_ROOT\Licenses\5C505A59-E312-4B89-9508-E162F8150517导出备份;然后删掉;重新打

    2026年4月13日
    5
  • ubuntu20.04主题美化_ubuntu优化工具

    ubuntu20.04主题美化_ubuntu优化工具用了这么长时间ubuntu了,也该让自己的老婆漂亮点了。对吧。 于是搜之,找到资料记录一下: 资料链接:http://www.ubuntuhome.com/ubuntu-10-04-install-themes.html 主要步骤:添加ppa源,然后下载好看的主题,具体见资料链接。 记录一下添加源:首先打开终端并依次输入:sudoadd-apt-r…

    2026年2月26日
    3
  • 为什么百度查到的ip和ipconfig查到的不一样;详解公网Ip和私网ip;详解网络分类ABC;

    为什么百度查到的ip和ipconfig查到的不一样;详解公网Ip和私网ip;详解网络分类ABC; IP可以分为PublicIP和PrivateIP,出现这种规划的原因在于IPv4所能表示的IP太少而电脑太多以至于不够用,然而只有PublicIP才能直接连接上网络,所以对于那些公司,学校,政府机构等场所,就可以集中使用私有的IP进行管理,而大家可以共用一个IP去连接上公网,这样,就省下了许多宝贵的PublicIP。你有没有发现,你每次使用ipconfig查到的地址,要么就是172….

    2022年6月6日
    130
  • 什么是GMM算法_bs模型公式

    什么是GMM算法_bs模型公式1.高斯模型与高维高斯模型介绍高斯模型也就是正态分布模型,该模型最早可见于我们的高中数学教材中。闻其名知其意,正态分布是自然界中普遍存在的一种分布。比如,考试成绩,人的智力水平等等。都是大致呈现为正态分布。其概率密度函数为其中参数为μ,σ2,都是一维标量。对于高维高斯模型,与一维类似,只是自变量变成了多维,是一个向量。其概率密度函数为其中参数为μ…

    2025年6月6日
    4
  • 设置VScode的快捷键

    设置VScode的快捷键打开快捷键面板首先,打开快捷键设置面板:文件-首选项-键盘快捷键Ctrl+k,Ctrl+s也能打开设置快捷键这一步,需要已经知道,默认的快捷键是什么。比如,跳转到上一个编辑位置(VScode中叫前进,奇了怪),默认的是”alt+right”。那么,在最上方的面板中输入:我想要改成”Ctrl+Alt+右箭头”,点击进入,按下该组合键:然后,点击“已有2条命令的按键绑定与此相同”,清理已有的快捷键设置:然后,再次尝试绑定,就可以成功了:…

    2022年5月25日
    340
  • intelliJ IDEA怎么读?

    intelliJ IDEA怎么读?intelliJIDEA 读音是 n tel d e a di

    2026年3月27日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号