首页 程序笔记 js对象自动属性绑定html模版插件

js对象自动属性绑定html模版插件

对于一些不是用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模版和数据对象不再使用加号拼接,看起来比较清晰了,只要关注模版就行了。

站心网

对于一些不是用React, Vue框架的前后端不分离的老网站,通过ajax请求数据后输出html页面比较繁琐,一般使用..

为您推荐

DiscuzX3.5多合一聚合支付接口插件发布

Discuz论坛多合一聚合支付接口插件,该插件直接替换了自带的支付接口功能,增强了支付的扩展性,自带支持支付宝、微信、QQ钱包官方支付,以及彩虹易支付、我爱支付、虎皮椒等支付通道,并且可以自由扩展其他的支付通..

html/js调用本地邮箱发送邮件

用a标签:<a href="mailto:收件人邮箱?subject=test&cc=抄送人邮箱&subject=主题&body=内容">调用邮箱本地发送邮件</a>js发送:/*js调用本地邮箱发送邮件*/function mailsome1() {var who = prompt("请输入收件人邮..

JS 中彻底删除 JSON 对象组成的数组中的元素

在 JS 中,对于某个由 JSON 对象组成的数组,例如:var test = [{ "a": "1", "b": "2" }, { "a": "3", "b": "4" }, { "a": "5", "b": "6" }];如果我们想要删除其中的第二个json对象,应该怎么做呢?其实方法和操作数..

使用 html2canvas 实现截图功能

html2canvas 是一个开源的 JavaScript 库,用于将网页上的 HTML 元素渲染成图像。它通过遍历页面的 DOM 树和计算样式,然后将其绘制到 <canvas> 元素上,最终生成图片。该库不依赖服务器端,而是通过浏览器端的 Java..

基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础

LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼.文档地址:https://liningit.github.io/LnskyDB/开源地址:https://github.com/liningit/Ln..

ABP.Net Core使用教程(一)启动模版项目

只需要简单的3步:1,到官网下载模版项目 https://aspnetboilerplate.com/Templates2,用VS2017打开,将Web.Host设置为启动项3,在程序包管理器控制台(Nuget控制台)里设定默认项目为EntityFrameworkCore,执行命令..

PluginCore 基于 ASP.NET Core 的轻量级插件框架

项目概述PluginCore 是一个基于 ASP.NET Core 的轻量级插件框架,旨在简化插件的集成与管理。通过最少的配置,开发者可以快速集成并专注于业务逻辑的开发。它支持动态 WebAPI、插件隔离与共享、前后端分离、热插拔等..

扩展插件 Resharper

Resharper下载地址提取码:96wxReSharper是一个JetBrains公司出品的著名的代码生成工具。其能帮助Microsoft Visual Studio成为一个更佳的IDE,它包括一系列丰富的能大大增加C#和Visual Basic .net开发者生产力的特征..

常用的javascript网页数字滚动插件

在网页开发中,数字滚动效果广泛用于展示统计数据、计数器、动画化的数字效果等。以下是几款常用的 JavaScript 数字滚动插件:1. CountUp.js简介: CountUp.js 是一个轻量级的数字滚动插件,提供平滑的数字滚动动画效..

工作这么多年,你能向新人解释清到底什么是面向对象编程吗?

面向对象编程想必大家都耳熟能详,但是写了这么多代码你对面向对象有清晰的认识吗?来看看这几个问题:到底什么是面向对象编程?和面向过程编程有什么区别?什么又称为面向对象语言、面向过程语言?用面向对象语言写..

前端js拖拽插件库有哪些?

前端拖拽插件主要包括GoJS、vue.draggable、Vue.Draggable.next、gridster.js、interact.js等。以下是对这些插件的具体介绍:GoJSGoJS官网:https://gojs.netGoJS是一款功能丰富的JavaScript库,主要用于构建流程图..

Swapy - 开源JavaScript js拖拽插件

Swapy是一个简单易用的JavaScript工具,能够将任何布局转换为拖拽交换布局。本文将详细介绍Swapy的功能、如何使用它,以及它在实际项目中的应用。什么是Swapy?Swapy是由TahaSh开发的一款开源JavaScript工具。它的核..

18款Visual Studio实用插件

Visual Studio插件搜索Visual Studio插件市场ReSharper(付费)GitHub Copilot(付费)CodeMaid(免费)CSharpier(免费)Visual Studio Theme Pack(免费)Indent Guides(免费)Markdown Editor(免费)HTML Snipp..

宝塔里mysql停止了自动启用脚本

mysql突然停止的原因有多种,这里不列举,可以排查具体原因。如果停止后,还可以手工正常启用mysql,那可以考虑把shell脚本添加到宝塔的计划任务里,定时每隔几分钟检测一次,让mysql自动检测停止后立马启用。ps=`ps..

判断 nginx 服务是否启动,未启动自动重启 shell脚本

我的是宝塔面板直接上代码nginx_procnum=`ps -ef|grep "nginx"|grep -v grep|wc -l`if [ $nginx_procnum -eq 0 ]then echo "start nginx..." /etc/init.d/nginx startelse echo "no cmd" fi然后添加定时任务;每分钟..

宝塔里redis停止了自动启用脚本

redis突然停止的原因有多种:1、内存不足,如果Redis使用的内存超过了服务器可用内存,操作系统会自动杀死Redis进程。2、服务器的资源限制(ulimit)比较低,Redis可能会因为无法打开足够的文件描述符而停止。3、其..

_ViewStart.cshtml文件的作用

在ASP.NET MVC 3.0中,新建项目后,Views目录下会出现一个这样的文件:_ViewStart.cshtml(对应Razor,C#,也可能是_ViewStart.vbhtml) 。 _ViewStart.cshtml这个文件会在所有View(.cshtml)被执行之前执行,主要..

使用htmlagilitypack+xpath抓取网页内容示例

本文使用htmlagilitypack+xpath抓取网页内容示例,用简单的例子展示如何使用htmlagilitypack抓取网页,可以用来做数据采集等功能。用htmlagilitypack+xpath抓取网页内容示例源码下载首先在nuget中获取htmlagilitypac..

.NET Core Razor page/MVC 返回json忽略空属性

.NET Core Razor page/MVC 返回json忽略空属性,修改program.cs。添加配置builder.Services.AddRazorPages().AddJsonOptions(options => {options.JsonSerializerOptions.DefaultIgnoreCondition = System.Text.Json..

MiniAPI参数绑定 服务注入 响应输出使用示例

在VS2022中可以使用MiniAPI。 使用MiniAPI以创建具有最小依赖项的 HTTP API。 它们非常适合于需要在 ASP.NET Core 中仅包括最少文件、功能和依赖项的微服务和应用。MiniAPI创建方法启动 Visual Studio 2022 并选择“..

发表回复

返回顶部