一、简介

在实际项目中,难免会遇到在js中动态拼接html的代码,这样虽然比较简单,但是相对来说不太好维护,后期如果改了html结构,那么js改动的东西会比较多。如下代码就是动态拼接html的不太好的代码:

var html = '<a class="weui-cell weui-cell_access" href="">'+'<div class="weui-cell__hd">'+'<div class="round"></div>'+'</div>'+' <div class="weui-cell__bd">'+'<p class="font30 text-title">'+ (item.clsname ? item.clsname : "")             +'&nbsp;&nbsp;&nbsp;' + item.zrs + '人</p>'+'<div class="text-desc font24 mgt10">'+'<span>男生 '+item.nszrs+'人</span>'+'<span class="divider-vertical"></span>'+'<span>女生'+item.nvzrs+'人</span>'+'</div></div><div class="weui-cell__ft"></div></a>';

以下用类似ES6中模板字符串的方式来说明如何在js中使用HTML模板。

二、方法

【a】首先,扩展一个解析HTML代码的方法:

    /*** 扩展HTML模板解析的方法* @param functionObject 解析的对象* @returns {function(*): string}*/Object.prototype.parseHTMLTemplate = function (functionObject) {return function (scope) {return functionObject.toString().match(/\/\*([\s\S]*?)\*\//)[1].replace(/\$\{\w.+\}/g, function (variable) {var value = scope;variable = variable.replace('${', '').replace('}', '');variable.split('.').forEach(function (section) {value = value[section];});return value;});}};

该方法主要是通过正则替换${xxx}的值来实现解析HTML代码。

【b】将HTML模板通过注释方式写在js方法里面:

var template01 = parseHTMLTemplate(function () {/*<div><h2>${title}</h2><div class="content">${content}</div></div>*/});var object01 = {title: 'title01',content: 'content01'};var newHTML = template01(object01);

示例代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>js中使用HTML模板</title><script type="text/javascript" src="../js/jquery-3.2.1.min.js"></script>
</head>
<body><div id="example01">示例一:使用${title}指定替换的值</div><div id="example02">示例二:使用${data.title}指定替换的值</div><script type="text/javascript">/*** 扩展HTML模板解析的方法* @param functionObject 解析的对象* @returns {function(*): string}*/Object.prototype.parseHTMLTemplate = function (functionObject) {return function (scope) {return functionObject.toString().match(/\/\*([\s\S]*?)\*\//)[1].replace(/\$\{\w.+\}/g, function (variable) {var value = scope;variable = variable.replace('${', '').replace('}', '');variable.split('.').forEach(function (section) {value = value[section];});return value;});}};/************************示例一:使用${title}指定替换的值***********************/var template01 = parseHTMLTemplate(function () {/*<div><h2>${title}</h2><div class="content">${content}</div></div>*/});var object01 = {title: 'title01',content: 'content01'};var newHTML = template01(object01);console.log(newHTML);$("#example01").after(newHTML);/************************示例二:使用${data.title}指定替换的值******************/var object02 = {data: {title: 'title02',content: 'content02'}};var template02 = parseHTMLTemplate(function () {/*<div><h2>${data.title}</h2><div class="content">${data.content}</div></div>*/});var newHTML02 = template02(object02);console.log(newHTML02);$("#example02").after(newHTML02);</script>
</body>
</html>

这样就实现了在js中使用HTML模板避免动态拼接的方法,方便后期维护和代码清晰。

三、总结

本文是笔者对在js中使用HTML模板的一些总结,仅供大家学习参考,日常积累,希望对大家有所帮助。

js中使用HTML模板字符串相关推荐

  1. js中json数组 和 字符串 互转

    js中json数组 和 字符串 互转 const jsonStr1 = JSON.stringify( res.responseObject); //json转字符串.//const area = J ...

  2. js中的concat函数-字符串拼接+数组拼接

    js中的concat函数-字符串拼接+数组拼接 一.concat() 方法用于字符串拼接字符串 let str1 = "abc"let str2 = "123" ...

  3. JS中怎样将时间字符串转换成Date并比较大小

    场景 在js中通过前端日期选择控件获取的时间参数为字符串"2020-09-30" 现在要将其转换为Date类型并与当前日期进行对比,看是否在当前日期之前. 注: 博客: https ...

  4. java和js中判断两个字符串是否相等对比

    链接一: JavaScript中的基本字符串与字符串对象的区别 链接二: JAVA如何判断两个字符串是否相等 链接三: js中的"=="和equals()以及is()三者的区别 在 ...

  5. 关于js中replace()只能替换字符串中第一个对象的问题

    工作中用到js的replace比较多,将一个字符串中某个内容替换成另一个内容,但是往往只找到第一个符合条件的内容后就不往后替换了,可以用正则来解决此问题. var a="aaa,bbb,cc ...

  6. js中的数组和字符串的一些方法

    数组的一些方法: 1.join()和split()方法 <script type="text/javascript"> var x; var a=new Array() ...

  7. JS中的数组和字符串

    1.Array对象用于定义数组 //方式一var arr=new Array(1,2,3);alert(arr);//方式二 var arr=[1,2,3]; alert(arr); //特点:JS数 ...

  8. js中判断两个字符串是否相等

    在javascript判断两个变量值是否相等,可以使用 ==(等同)操作符 或者 ===(恒等)操作符 == 操作符 "等同"操作符,简单判断2个变量值是否相等,变量类型不一致时, ...

  9. js中常用的操作字符串的方法大全

    charCodeAt()返回一个整数,代表指定字符的Unicode编码 fromCharCode()从一些Unicode字符串得到一个字符串  charAt()根据指定下标位置返回对应字符,如果下标超 ...

  10. js中数组拼接成字符串

    在本例中,我们将使用分隔符来分隔数组中的元素: <script type="text/javascript">var arr = new Array(3) arr[0] ...

最新文章

  1. 新书来了!《ActionScript 3.0游戏设计基础(第2版)》
  2. c语言程序设计入门导论,程序设计入门——C语言
  3. 搭建kafaka_kafka单机环境搭建及其基本使用
  4. TF学习——TF数据读取:TensorFlow中数据读这三张图片的5个epoch +把读取的结果重新存到read 文件夹中
  5. 深度解读 OpenYurt:从边缘自治看 YurtHub 的扩展能力
  6. 《Android进阶之光》--多线程编程
  7. 漫画:什么是中间人攻击
  8. 如何三步搭建一套声纹系统
  9. hash存储结构【六】
  10. STM8 ADC转换模式-------带缓存的连续模式
  11. [论文阅读] Cost-Effective Active Learning for Deep Image Classification
  12. 问题五十一:怎么用ray tracing画tear drop
  13. 万能声卡驱动精灵2016官方版
  14. php中将图片裁剪为圆形
  15. ReactNative实现ListView分组,悬浮效果
  16. Unity单人游戏集合
  17. python二十行代码教你批量采集超高清 jpg
  18. Python这么强大, 怎样快速学习?
  19. elasticsearch从入门到入门系列(二)---快速入门B
  20. 2026年中国软件定义存储市场容量将接近45.1亿美元

热门文章

  1. java的mime类型_MIME类型大全
  2. 什么是java OOM Out Of Memory 内存溢出?如何分析及解决oom问题?
  3. Brinson归因模型
  4. bfs和dfs:poj2386和leetcode130
  5. Gibbs 采样完整解析与理解
  6. 【POJ 2449】第K短路【A*算法】
  7. linux crontab怎么启动,【linux之crontab,启动】(示例代码)
  8. 美图欣赏,转载[原文链接http://toutiao.com/a4001258776/]
  9. 怎样用计算机算代数,计算机与代数-如何计算sqrt-方法和实现 - 小黑电脑
  10. mysql里判断_mysql里如何使用判断语句?