js中使用HTML模板字符串
一、简介
在实际项目中,难免会遇到在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 : "") +' ' + 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模板字符串相关推荐
- js中json数组 和 字符串 互转
js中json数组 和 字符串 互转 const jsonStr1 = JSON.stringify( res.responseObject); //json转字符串.//const area = J ...
- js中的concat函数-字符串拼接+数组拼接
js中的concat函数-字符串拼接+数组拼接 一.concat() 方法用于字符串拼接字符串 let str1 = "abc"let str2 = "123" ...
- JS中怎样将时间字符串转换成Date并比较大小
场景 在js中通过前端日期选择控件获取的时间参数为字符串"2020-09-30" 现在要将其转换为Date类型并与当前日期进行对比,看是否在当前日期之前. 注: 博客: https ...
- java和js中判断两个字符串是否相等对比
链接一: JavaScript中的基本字符串与字符串对象的区别 链接二: JAVA如何判断两个字符串是否相等 链接三: js中的"=="和equals()以及is()三者的区别 在 ...
- 关于js中replace()只能替换字符串中第一个对象的问题
工作中用到js的replace比较多,将一个字符串中某个内容替换成另一个内容,但是往往只找到第一个符合条件的内容后就不往后替换了,可以用正则来解决此问题. var a="aaa,bbb,cc ...
- js中的数组和字符串的一些方法
数组的一些方法: 1.join()和split()方法 <script type="text/javascript"> var x; var a=new Array() ...
- JS中的数组和字符串
1.Array对象用于定义数组 //方式一var arr=new Array(1,2,3);alert(arr);//方式二 var arr=[1,2,3]; alert(arr); //特点:JS数 ...
- js中判断两个字符串是否相等
在javascript判断两个变量值是否相等,可以使用 ==(等同)操作符 或者 ===(恒等)操作符 == 操作符 "等同"操作符,简单判断2个变量值是否相等,变量类型不一致时, ...
- js中常用的操作字符串的方法大全
charCodeAt()返回一个整数,代表指定字符的Unicode编码 fromCharCode()从一些Unicode字符串得到一个字符串 charAt()根据指定下标位置返回对应字符,如果下标超 ...
- js中数组拼接成字符串
在本例中,我们将使用分隔符来分隔数组中的元素: <script type="text/javascript">var arr = new Array(3) arr[0] ...
最新文章
- 新书来了!《ActionScript 3.0游戏设计基础(第2版)》
- c语言程序设计入门导论,程序设计入门——C语言
- 搭建kafaka_kafka单机环境搭建及其基本使用
- TF学习——TF数据读取:TensorFlow中数据读这三张图片的5个epoch +把读取的结果重新存到read 文件夹中
- 深度解读 OpenYurt:从边缘自治看 YurtHub 的扩展能力
- 《Android进阶之光》--多线程编程
- 漫画:什么是中间人攻击
- 如何三步搭建一套声纹系统
- hash存储结构【六】
- STM8 ADC转换模式-------带缓存的连续模式
- [论文阅读] Cost-Effective Active Learning for Deep Image Classification
- 问题五十一:怎么用ray tracing画tear drop
- 万能声卡驱动精灵2016官方版
- php中将图片裁剪为圆形
- ReactNative实现ListView分组,悬浮效果
- Unity单人游戏集合
- python二十行代码教你批量采集超高清 jpg
- Python这么强大, 怎样快速学习?
- elasticsearch从入门到入门系列(二)---快速入门B
- 2026年中国软件定义存储市场容量将接近45.1亿美元
热门文章
- java的mime类型_MIME类型大全
- 什么是java OOM Out Of Memory 内存溢出?如何分析及解决oom问题?
- Brinson归因模型
- bfs和dfs:poj2386和leetcode130
- Gibbs 采样完整解析与理解
- 【POJ 2449】第K短路【A*算法】
- linux crontab怎么启动,【linux之crontab,启动】(示例代码)
- 美图欣赏,转载[原文链接http://toutiao.com/a4001258776/]
- 怎样用计算机算代数,计算机与代数-如何计算sqrt-方法和实现 - 小黑电脑
- mysql里判断_mysql里如何使用判断语句?