You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jQuery处理包含模板文本的HTML元素?

问题:避免重复编写HTML元素实现数据渲染

我之前用以下代码实现带数据的HTML元素渲染:

<div id="parent">
  <span>loading...</span>
</div>

<script>
  var data="im data";
  $("#parent").html(`<span>${data}</span>`);
</script>

但这种方式需要重复编写<span>元素,后期修改十分不便。因此我尝试直接复用已有元素,不用重新编写,代码如下:

<div id="parent">
  <span>${data}</span>
</div>

<script>
  var data="im data";

  $("#parent").html($("#parent").html());

  // 实际显示的是${data},而非预期的im data
</script>

但未达到预期效果。


解决方案(感谢Carsten Massmann提供)

以下是支持单对象和数组对象数据渲染的实现代码,无需重复编写HTML模板:

JavaScript 代码

const data={id:"1",name:"john doe"};
const datas=[
  {id:"1",name:"hasan"},
  {id:"2",name:"salim"}
];

passData($("#parent"),data);
passDatas($("#parent2"),datas);
// 使用示例

function passDatas(parent,data){
    if(parent.data("_html_temp")==undefined){
        parent.data("_html_temp",parent.html());
    }

    parent.html("");
    data.forEach((obj)=>{
      parent.append(parent.data("_html_temp").replace(/\$\{([^}]+)\}/g,(_,n)=>obj[n]));
    })
  }
  
function passData(parent,data){
    if(parent.data("_html_temp")==undefined){
        parent.data("_html_temp",parent.html());
    }
    parent.html(parent.data("_html_temp").replace(/\$\{([^}]+)\}/g,(_,n)=>data[n]));
  }

HTML 代码

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

单对象渲染
<div id="parent">
   <div>
    <span>id:${id}</span>
    <span>name:${name}</span>
   </div>
</div>

<br>
<br>

数组对象渲染
<div id="parent2">
   <div>
    <span>id:${id}</span>
    <span>name:${name}</span>
   </div>
</div>

内容的提问来源于stack exchange,提问作者M HASANUDDIN Web Developer Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:07:07