用 DOMSubtreeModified 代替 MutationObserver 问题

Substituting DOMSubtreeModified for MutationObserver issues

我正在尝试检查新的 table 行 <tr> 是否被添加到 table 中,如下所示:

var myTab;e = $('#myTable tbody');
myTab.on("DOMSubtreeModified", function() {
  console.log('Row added');
}); 

但是这会打印出 100 条 'Row added' 消息,例如,如果同时向 table 添加 10 行,即使其中之一我仍然打印出 'Row added' 10次。这让我想到它正在监听 myTable 内的所有变化,这不是我想要的。我只希望它执行一次,即使添加了 100 行(一次批量添加行)。

我通过以下方式找到了另一个解决方案:MutationObserver 但无法弄清楚如何设置它以完成我的任务(一旦行添加到 myTable)执行一次更改事件.

这是 table 的示例标记。

<table id="myTable">
    <thead>
    <tr>
     <th>
      <div>Date</div>
      <span>Time</span>
   </th>
    </tr>
    </thead>

    <tbody>
    <tr>
      <td>Content</td>
      <td>More content</td>
    </tr>

    <tr>
      <td>Content</td>
      <td>More content</td>
    </tr>

    <!-- etc.. -->
  </tbody>
</table>

这是一个非常简单的版本,省略了 类、数据属性、id 和其他元素,但应该可以解决问题。

var target = $("#myTable").get(0);

// create an observer instance
var observer = new MutationObserver(function(mutations) {
  mutations.forEach(function(mutation) {
    // do stuff when
    // `childList`, `subtree` of `#myTable` modified
    alert(mutation.type);        
  });    
});

// configuration of the observer:
var config = { childList: true, subtree:true };

// pass in the target node, as well as the observer options
observer.observe(target, config);

$("#myTable tbody").append("<tr><td>abc</td></tr><tr><td>def</td></tr>")
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table id="myTable">
    <thead>
    <tr>
     <th>
      <div>Date</div>
      <span>Time</span>
   </th>
    </tr>
    </thead>

    <tbody>
    <tr>
      <td>Content</td>
      <td>More content</td>
    </tr>

    <tr>
      <td>Content</td>
      <td>More content</td>
    </tr>

    <!-- etc.. -->
  </tbody>
</table>