跨度文本更改的MutationObserver不会触发

Mat*_*ius 4 html javascript jquery mutation-observers

这只是一个简单的例子而不是实际的事情.

仍然MutationObserver没有解雇,所以我对它是如何工作的假设是错误的.

的jsfiddle

$(function() {
  var editButtonVisibility = function() {
    console.log('bam');
  }

  $('#RiskPostcodeSummary span').on("change", function() {
    console.log("pew pew");
  });

  var observer = new MutationObserver(function(e) {
    editButtonVisibility();
  });

  observer.observe($('#RiskPostcodeSummary span')[0], {
    characterData: true
  });
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="RiskPostcodeSummary">
  <span></span>
</div>
<input type="button" value="click" onClick="$('#RiskPostcodeSummary span').text('sdfsdf');" />
Run Code Online (Sandbox Code Playgroud)

MutationObserver当我更改文本时为什么不触发<span>

Ric*_*ock 11

添加childList: true修复问题.

来自https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver:

childList:如果要观察目标节点的子元素(包括文本节点)的添加和删除,则设置为true.

在您的示例中,您正在更改span元素的文本节点子节点.

$(function() {
  var editButtonVisibility = function() {
    console.log('bam');
  }

  $('#RiskPostcodeSummary span').on("change", function() {
    console.log("pew pew");
  });

  var observer = new MutationObserver(function(e) {
    editButtonVisibility();
  });

  observer.observe($('#RiskPostcodeSummary span')[0], {
    characterData: true,
    childList: true
  });
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="RiskPostcodeSummary">
  <span></span>
</div>
<input type="button" value="click" onClick="$('#RiskPostcodeSummary span').text('sdfsdf');" />
Run Code Online (Sandbox Code Playgroud)