js对象自动属性绑定html模版插件
2024-08-31
16
对于一些不是用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模版和数据对象不再使用加号拼接,看起来比较清晰了,只要关注模版就行了。
更新于:18天前赞一波!
相关文章
- JS ES6 模块化开发入门
- 谷歌浏览器 常用插件推荐
- 常用js图表插件推荐
- VSCode 开发必备插件以及配置
- js正则验证url格式
- JS实现类似文本contains的方法,用indexOf实现
- js如何获取urlrefer
- 常用js表单验证插件推荐
- js一键分享插件share.js
- ColorPicker 调色板插件 - 颜色拾取
- HTML-CSS-JS Prettify 代码格式化插件
- 原生js格式化json
- Material Theme 主题插件
- Pretty Json 插件 - JSON格式化
- .NET Reflector Visual Studio 插件
- PhpStorm 安装主题插件 Material Theme UI
- zblog问答聚合采集插件,双标题,目录,问答聚合,自动推送
- 如何在 Python 和 Node.js 之间通信 JSON 数据?
- 使用Prefetch Preload减少JS加载时间
- js设置cookie默认路径
文章评论
全部评论