js对象自动属性绑定html模版插件
2024-08-31
70
对于一些不是用React, Vue框架的前后端不分离的老网站,通过ajax请求数据后输出html页面比较繁琐,一般使用拼接html的方式。于是写了一个插件减少拼接html的工作量。
Object.prototype.bindList = function (tpl, options) {
var html = "";
if (options && options.container && options.container.el) {
html += `<${options.container.el}`;
if (options.container.attrs) {
var keys = Object.keys(options.container.attrs);
if (keys && keys.length > 0) {
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var value = options.container.attrs[key];
html += ` ${key}="${value}"`;
}
}
}
html += ">";
}
if (this && this.length > 0) {
for (var i = 0; i < this.length; i++) {
var item = list[i];
html += item.bindItem(tpl);
}
}
if (options && options.container && options.container.el) {
html += `</${options.container.el}>`;
}
return html;
};
Object.prototype.bindItem = function (tpl) {
if (tpl) {
var keys = Object.keys(this);
if (keys && keys.length > 0) {
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var value = this[key];
tpl = tpl.replaceAll(`{${key}}`, value);
}
}
}
return tpl;
};
当api返回一个对象数组时,直接通过调用list.bindList()方法生成html。
假设我们请求api拿到一个文章列表,我们先定义文章列表项的模版template。
// mock一个api返回的list对象
var list = [
{ id: 1, title: "文章标题1" },
{ id: 1, title: "文章标题2" },
];
// 定义绑定数据的html模版
var tpl = `
<li>
<a href="/articles/{id}">{title}</a>
</li>
`;
然后调用扩展方法bindList()
var html = list.bindList(tpl);
生成的html结果:
<li>
<a href="/articles/1">文章标题1</a>
</li>
<li>
<a href="/articles/1">文章标题2</a>
</li>
我们也可以为list设置一个父元素容器
var html = list.bindList(tpl , new{
container:{
el:"ul",
attrs:{
id:"articleList",
class:"article-list"
}
}
});
生成的Html结果:
<ul id="articleList" class="article-list">
<li>
<a href="/articles/1">文章标题1</a>
</li>
<li>
<a href="/articles/1">文章标题2</a>
</li>
</ul>
这样Html模版和数据对象不再使用加号拼接,看起来比较清晰了,只要关注模版就行了。
更新于:4个月前赞一波!
相关文章
- 【说站】js isBetween时间点的判断
- 【说站】js isSame判断对象是否相同
- 【说站】js中diff函数的使用
- 【说站】js中isBefore函数如何判断
- 【说站】js中MomentJS构造字符串
- 【说站】js内存的生命周期介绍
- 【说站】js中六种基本数据类型
- 【说站】js如何实现类型判断
- 【说站】js引用计数算法是什么
- 【说站】js原型有哪些规则
- ABP.Net Core使用教程(一)启动模版项目
- 【说站】js垃圾回收的场景优化
- 【说站】js执行上下文是什么意思
- 【说站】js函数执行过程的探究
- 【说站】js变量的作用域如何使用
- 【说站】js使用闭包的注意点
- 【说站】js有哪些常用的数组api
- 【说站】js中this的使用场景
- 【说站】js如何对类型进行判断
- 【说站】js中闭包是什么?怎么用?
文章评论
评论问答