首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套jquery $.each重复迭代问题

嵌套jquery $.each重复迭代问题
EN

Stack Overflow用户
提问于 2021-02-03 08:40:22
回答 2查看 29关注 0票数 0

希望您能帮助我解决我的问题,我正在使用jquery迭代嵌套的json,这是我的示例代码

代码语言:javascript
复制
function getList() {
 $.getJSON("src/list.json", function(data) {
  $.each(data, function( key, fax ) {
    const faxItem = this;
      displayOnDom.append(`<div id=faxPlan-${faxItem.id} class="pricing-table flex-item ${faxItem.recommended ? 'recommended' : ''}">
        <h3 class="pricing-title">${faxItem.title}</h3>
        <div class="price">${faxItem.price_per_month}<sup>/ month</sup></div>
        ${faxItem.button ? `<p class="rounded">${faxItem.button_text}</p>` : `<p class="norounded">${faxItem.button_text}</p>`}
        <div class="table-list"></div>
        `);
    $.each(fax.features, function( key, list ) {
      $('.table-list').append(`<p>${list.title}<span>${list.list}</span></p>`)
    })
  })   
});

}

我有一个像这样嵌套的json文件,包含多个条目。

代码语言:javascript
复制
[{
"id": 1,
"title": "Pay-as-you-go",
"recommended": false,
"price_per_month": "$0.00",
"button": false,
"button_text":"For flexi-fax users, top up as you need with no lock-in contracts",
"icon": true,
"features": [{
        "title": "Send Credits Included",
        "list": "$0.30 Excess send credit charges "
    },
    {
        "title": "Received Credits Included",
        "list": "$0.30 Excess received credit charges "
    },
    {
        "title": "Free Fax Number",
        "list": ""
    }
],
"cta": {
    "label": "TRY FOR FREE",
    "link": "#"
}

},

我的问题是,在第二次$.each迭代中,所有的特性数组都在第一次迭代中一起显示。应该在他们自己的迭代中显示出来。

希望你们能明白我的问题。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-03 08:44:55

解决这个问题的一个快速方法是将:last添加到$('.table-list')中。

目前的问题是,您正在更新每个table-list

解决方案1可以是:$('.table-list:last')

解决方案1

代码语言:javascript
复制
var displayOnDom = $(".test");

var data = [{
    "id": 1,
    "title": "Pay-as-you-go",
    "recommended": false,
    "price_per_month": "$0.00",
    "button": false,
    "button_text": "For flexi-fax users, top up as you need with no lock-in contracts",
    "icon": true,
    "features": [{
        "title": "Send Credits Included",
        "list": "$0.30 Excess send credit charges "
      },
      {
        "title": "Received Credits Included",
        "list": "$0.30 Excess received credit charges "
      },
      {
        "title": "Free Fax Number",
        "list": ""
      }
    ],
    "cta": {
      "label": "TRY FOR FREE",
      "link": "#"
    }
  },
  {
    "id": 1,
    "title": "Pay-as-you-go",
    "recommended": false,
    "price_per_month": "$0.00",
    "button": false,
    "button_text": "For flexi-fax users, top up as you need with no lock-in contracts",
    "icon": true,
    "features": [{
        "title": "Send Credits Included",
        "list": "$0.30 Excess send credit charges "
      },
      {
        "title": "Received Credits Included",
        "list": "$0.30 Excess received credit charges "
      },
      {
        "title": "Free Fax Number",
        "list": ""
      }
    ],
    "cta": {
      "label": "TRY FOR FREE",
      "link": "#"
    }
  }
]

$.each(data, function(key, fax) {
  const faxItem = this;
  displayOnDom.append(`<div id=faxPlan-${faxItem.id} class="pricing-table flex-item ${faxItem.recommended ? 'recommended' : ''}">
        <h3 class="pricing-title">${faxItem.title}</h3>
        <div class="price">${faxItem.price_per_month}<sup>/ month</sup></div>
        ${faxItem.button ? `<p class="rounded">${faxItem.button_text}</p>` : `<p class="norounded">${faxItem.button_text}</p>`}
        <div class="table-list"></div>
        `);
  $.each(fax.features, function(key, list) {
    $('.table-list:last').append(`<p>${list.title}<span>${list.list}</span></p>`)
  })
})
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="test"></div>

解决方案2

代码语言:javascript
复制
$.each(data, function(key, fax) {
  const faxItem = this;
  var t = $(`<div id=faxPlan-${faxItem.id} class="pricing-table flex-item ${faxItem.recommended ? 'recommended' : ''}">
        <h3 class="pricing-title">${faxItem.title}</h3>
        <div class="price">${faxItem.price_per_month}<sup>/ month</sup></div>
        ${faxItem.button ? `<p class="rounded">${faxItem.button_text}</p>` : `<p class="norounded">${faxItem.button_text}</p>`}
        <div class="table-list"></div>
        `);
  $.each(fax.features, function(key, list) {
    $(t).find('.table-list').append(`<p>${list.title}<span>${list.list}</span></p>`)
  })
  displayOnDom.append(t);
})

代码语言:javascript
复制
var displayOnDom = $(".test");

var data = [{
    "id": 1,
    "title": "Pay-as-you-go",
    "recommended": false,
    "price_per_month": "$0.00",
    "button": false,
    "button_text": "For flexi-fax users, top up as you need with no lock-in contracts",
    "icon": true,
    "features": [{
        "title": "Send Credits Included",
        "list": "$0.30 Excess send credit charges "
      },
      {
        "title": "Received Credits Included",
        "list": "$0.30 Excess received credit charges "
      },
      {
        "title": "Free Fax Number",
        "list": ""
      }
    ],
    "cta": {
      "label": "TRY FOR FREE",
      "link": "#"
    }
  },
  {
    "id": 1,
    "title": "Pay-as-you-go",
    "recommended": false,
    "price_per_month": "$0.00",
    "button": false,
    "button_text": "For flexi-fax users, top up as you need with no lock-in contracts",
    "icon": true,
    "features": [{
        "title": "Send Credits Included",
        "list": "$0.30 Excess send credit charges "
      },
      {
        "title": "Received Credits Included",
        "list": "$0.30 Excess received credit charges "
      },
      {
        "title": "Free Fax Number",
        "list": ""
      }
    ],
    "cta": {
      "label": "TRY FOR FREE",
      "link": "#"
    }
  }
]

$.each(data, function(key, fax) {
  const faxItem = this;
  var t = $(`<div id=faxPlan-${faxItem.id} class="pricing-table flex-item ${faxItem.recommended ? 'recommended' : ''}">
        <h3 class="pricing-title">${faxItem.title}</h3>
        <div class="price">${faxItem.price_per_month}<sup>/ month</sup></div>
        ${faxItem.button ? `<p class="rounded">${faxItem.button_text}</p>` : `<p class="norounded">${faxItem.button_text}</p>`}
        <div class="table-list"></div>
        `);
  $.each(fax.features, function(key, list) {
    $(t).find('.table-list').append(`<p>${list.title}<span>${list.list}</span></p>`)
  })
  displayOnDom.append(t);
})
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="test"></div>

票数 3
EN

Stack Overflow用户

发布于 2021-02-03 08:50:00

您可以使用.table-list (而不是.append)返回新创建的.appendTo,以便将其附加到:

代码语言:javascript
复制
function getList() {
 $.getJSON("src/list.json", function(data) {
  $.each(data, function( key, fax ) {
      const faxItem = this;
      displayOnDom.append(`<div id=faxPlan-${faxItem.id} class="pricing-table flex-item ${faxItem.recommended ? 'recommended' : ''}">
        <h3 class="pricing-title">${faxItem.title}</h3>
        <div class="price">${faxItem.price_per_month}<sup>/ month</sup></div>
        ${faxItem.button ? `<p class="rounded">${faxItem.button_text}</p>` : `<p class="norounded">${faxItem.button_text}</p>`}
        `);


      var tablelist = $('<div class="table-list"></div>').appendTo(displayOnDom);

      $.each(fax.features, function( key, list ) {
        tablelist.append(`<p>${list.title}<span>${list.list}</span></p>`)
      })
   })   
 });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66023896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档