0

我有一个创建 DOM 元素 onClick 的函数。该元素包含带有数组名称的输入。

一开始我已经有一个元素(与我创建的 onClick 相同)。

<tbody id="elementsBody">

<tr id="element1"> // 1 becomes 2 and so on when new element is added
  <td>
    <input type="hidden" name="numbers[]" value="1" /> // 1 becomes 2 and so on when new element is added
  </td>
  <td>
    <input type="text" name="titles[]" />
  </td>
</tr>

// Newly created Elements goes in here!!!

</tbody>

这是我的函数,它创建了更多类似上面的元素。

并且还为这个新创建的元素创建了一个删除按钮 DIV 。

function addElement() {
  var elementsBody = document.getElementById('elementsBody');

  var numbers = document.forms[1].elements['numbers[]'];
  var number = numbers.length+1;

  if (isNaN(number)) {
    var number = 2;
  }

  var numberInput = '<td><input type="hidden" name="numbers[]" value="'+ number + '" /></td>';
  var titleTd = '<td><input type="text" name="titles[]" /></td>';

  // This is the Delete Button DIV
  // I want to create a function (deleteElement) which Removes This Element
  var deleteButton = '<td><div onClick="deleteElement('+ number + ')">Delete Element</div></td>';

  elementsBody.insertAdjacentHTML('beforeend', '<tr id="element' + number + '">' + numberInput + titleTd + deleteButton + '</tr>');
}

我想创建一个函数 (deleteElement) 来删除这个添加的元素onClick。

删除元素后,我希望该函数对所有元素值和 ID 重新排序。例如,如果我删除元素编号 2,则第三个元素的值和 ID 必须变为 2。

不是 jQuery。

请帮帮我!

4

2 回答 2

1

您将构建一个包含所有相关元素的数组。删除从目标到结束。从数组中删除目标在数组中重新编号然后添加剩下的内容。如果是我,我会考虑拥有另一个 ElementID(DisplayElmentID ?),那么您就不必做所有这些事情了。即,不要管DOM使用的ID属性

于 2012-06-03T12:05:46.760 回答
0

感谢@Esailija 的帮助!解决方案(小提琴):

function addElement() {
  var elementsBody = document.getElementById('elementsBody');

  var numberInput = '<td><input type="hidden" name="numbers[]" value="" /></td>';
  var titleTd = '<td><input type="text" name="titles[]" /></td>';
  var deleteButton = '<td><div onClick="this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode); update();">Delete Element</div></td>';

  elementsBody.insertAdjacentHTML('beforeend', '<tr>' + numberInput + titleTd + deleteButton + '</tr>');
  update();


}

function update() {
  var inputs = document.getElementById('elementsBody').querySelectorAll("input[type='text']");
  [].forEach.call(inputs, function(input, index) {

    input.value = index + 1;
  });
}
<table>
  <tbody id="elementsBody">

    <tr>
      <td>
        <input type="hidden" name="numbers[]" value="1" />
      </td>
      <td>
        <input type="text" name="titles[]" />
      </td>
    </tr>



  </tbody>
</table><button onclick="addElement();">add</button>

于 2012-06-03T14:01:42.647 回答