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

动态输入框填充JSON指定键值对问题求助(附DEMO)

问题:如何将modelinfo中的键值对(排除modelname)填充到动态创建的输入框?

我看到你已经能在控制台验证getModelDetails[0].modelinfo里的键值对,但没法把它们正确填充到动态生成的输入框里——原代码的问题在于,每次添加模板后,你用.each()遍历了所有已存在的.modelAttribute和.modelType元素,导致之前创建的输入框也被覆盖成当前的属性名和值了。

下面是更优的解决方案,核心思路是给每个新创建的模板单独赋值,而不是批量修改所有元素:

优化后的代码示例

// 提前获取模板内容,避免重复查询DOM,提升性能
const templateHtml = $('#modelTemplate').html(); // 假设你的模板元素有id="modelTemplate"

// 使用Object.entries遍历属性,同时获取键和值,比for...in更安全(避免遍历原型链属性)
Object.entries(getModelDetails[0].modelinfo).forEach(([propName, propValue]) => {
  // 跳过modelname字段
  if (propName !== 'modelname') {
    // 基于模板创建新的DOM元素实例
    const $newTemplate = $(templateHtml);
    // 只给当前这个新模板里的输入框赋值
    $newTemplate.find('.modelAttribute').val(propName);
    $newTemplate.find('.modelType').val(propValue);
    // 将赋值后的模板添加到容器中
    $('#container').prepend($newTemplate);
  }
});

为什么这个方案更好?

  • 避免批量覆盖问题:每次只操作刚创建的模板实例,不会影响之前已经添加到页面的输入框。
  • 更安全的遍历方式:Object.entries()只会遍历对象自身的可枚举属性,不会意外遍历到原型链上的属性,比for...in更可靠。
  • 性能优化:提前获取模板内容,减少重复的DOM查询操作,提升渲染效率。

额外注意事项

  • 确保你的模板元素(比如<script type="text/template">或者隐藏的<div>)有正确的选择器,比如示例中的#modelTemplate。
  • 如果你的模板是通过其他方式定义的(比如字符串模板),直接使用字符串即可,不需要从DOM中获取。

内容的提问来源于stack exchange,提问作者Inchara Raveendra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:50:01