第二次单击时未附加输入

Input not getting appended on second click

我正在创建一个简单的树结构,它将输入字段保存为 child。每个 child 包含一个输入字段和两个按钮。一个按钮用于为输入添加 child,另一个按钮用于删除节点。我的代码显示在下面的代码片段中,它没有按预期工作。问题是:我不能添加多个 child 只有一个 child 正在添加。

$("#main").on('click', '.add', function() {
  var $td = $(this).parent();
  var $td1 = $('<td>', {
    html: '<input  />      <button class="add">        Add      </button>      <button class="remove">        Remove      </button>'
  });
  console.log($td.children('table').length);
  if ($td.children('table').length)
    $td.children('table').children('tr').append($td1);
  else
    $td.append($('<table>', {
      html: $('<tr>', {
        html: $td1
      })
    }))
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table id="main" style="width:100%;text-align:center">
  <tr>
    <td>
      <input type="text" />
      <button class="add">
        Add
      </button>
      <button class="remove">
        Remove
      </button>
    </td>
  </tr>
</table>

所有现代浏览器上的浏览器解析器(AFAIK?!)添加 TBODY 元素。有关详细信息,请参阅 this answer

在您的情况下,这会使 $td.children('table').children('tr') 返回空的匹配集,因为 children() 仅针对直系后代(一级)。

您可以改用 find() 方法,匹配任何后代:

$td.children('table').find('tr').append($td1);