javascript - 在 JQuery 中的动态数组中创建动态数组

标签 javascript php jquery ajax dynamic-arrays

我有一个像下面这样的表格,其中包含步骤,每个步骤包含多门类(class)。

<div class="si-steps">
  <input type="text" class="si-step-input" name="step-name">
  <input type="text" class="si-step-input" name="step-id">
  <div class="si-courses">
    <input type="text" class="si-step-input" name="course-name">
    <input type="text" class="si-step-input" name="course-id">
  </div>
  <button type="button" id="si-course-btn" class="si-course-btn">Add course</button>
</div>
<button type="button" id="si-step-btn" class="si-step-btn">Add step</button>

当我点击“添加步骤”和“添加类(class)”按钮时,如何正确地附加这些?

我需要以这种格式添加它们

targetCourse: [{
  step-name: 
  step-id:
  course: [{
    course-name:
    course-id:
  }]
}]

最佳答案

您可以使用 querySelectorAll 提取所有步骤。然后,遍历此集合中的所有步骤并使用 querySelector 收集名称、ID 和类(class)。

Array.prototype.map 将使迭代更容易。

var stepElements = document.querySelectorAll('.si-steps');

var result = [].map.call(stepElements, function(stepElement) {
  var courseElements = stepElement.querySelectorAll('.si-courses');
  
  var coursesInfo = [].map.call(courseElements, function(courseElement) {
    return {
      'course-name': courseElement.querySelector("[name='course-name']").value,
      'course-id': courseElement.querySelector("[name='course-id']").value
    };
  });
  
  return {
    'step-name': stepElement.querySelector("[name='step-name']").value,
    'step-id': stepElement.querySelector("[name='step-id']").value,
    'course': coursesInfo
  };
});
  
document.getElementById('result').innerText = JSON.stringify(result, null, 4);
<div class="si-steps">
  <input type="text" class="si-step-input" name="step-name" value="step1">
  <input type="text" class="si-step-input" name="step-id" value="1">
  <div class="si-courses">
    <input type="text" class="si-step-input" name="course-name" value="course1">
    <input type="text" class="si-step-input" name="course-id" id="c1">
  </div>
  <button type="button" id="si-course-btn" class="si-course-btn">Add course</button>
</div>

<div class="si-steps">
  <input type="text" class="si-step-input" name="step-name" value="step2">
  <input type="text" class="si-step-input" name="step-id" value="2">
  <div class="si-courses">
    <input type="text" class="si-step-input" name="course-name" value="course3">
    <input type="text" class="si-step-input" name="course-id" id="c3">
  </div>
  <button type="button" id="si-course-btn" class="si-course-btn">Add course</button>
</div>

<button type="button" id="si-step-btn" class="si-step-btn">Add step</button>

<div>
  <pre id="result">
  </pre>
</div>

请注意,添加类(class)添加步骤 按钮未实现。向下滚动代码段以查看结果。

关于javascript - 在 JQuery 中的动态数组中创建动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33885660/

相关文章:

javascript - analytics.js 的 SegmentIO 开源版本设置问题

javascript - 响应当前显示部分的网页元素

php - Web REPL环境

php - 用户可以触发 javascript : function from URL?

php - 如何在 php 生成的 zip 中排除文件

jquery - IE8 上带有 jQ​​uery 验证的表单 : this.appendChild(a) 错误

javascript - 根据 slider 滑翔机 js 中的事件 li 值更改 css 值

javascript - 我的代码中的 Var 不起作用

javascript - 在每个测试文件之前开 Jest 异步设置

javascript - 滚动时更改 div 样式