MutationObserver를 사용하여 div에 변경 사항을 적용시킬 수 있습니다. 바로 아래에있는 div에 표시된 변경 사항을 변경하지만 한 번만 실행됩니다. 입력 div를 div로 지정할 내용을 입력하면 첫 번째 문자 만 표시됩니다. MDN에서 이것을 찾았습니다.MutationObserver를 한 번 더 작동 시키려면 어떻게해야합니까?
"요소에 관찰자를 추가하는 것은 addEventListener와 같습니다. 요소를 여러 번 관찰하면 차이가 없습니다. 요소를 두 번 관찰하면 관찰 콜백이 실행되지 않습니다. 두 번이나 disconnect()를 두 번 실행하지 않아도됩니다. 즉, 요소가 관찰되면 동일한 관찰자 인스턴스로 다시 관찰하면 아무 일도 일어나지 않습니다. 그러나 콜백 객체가 다를 경우 다른 관찰자를 추가 할 것입니다. 그것."
그러나이 문제를 해결하는 방법을 잘 모르겠습니다. 첫 번째 관찰자의 콜백에서 새로운 관찰자를 만들려고했는데, 그것이 관찰자 체인을 만들 겠다는 희망을 가지고 있지만 이것은 효과가 없습니다. 다른 사람들이 어떻게 이것을 해결 했습니까?
<div contenteditable="true" class="input"></div>
<div class="display"></div>
<script>
let input= document.getElementsByClassName("input")[0];
let display= document.getElementsByClassName("display")[0];
let config={attributes:true, childList:true, characterData:true};
let observer= new MutationObserver(function(mutations){
mutations.forEach(function(mutation){
if(mutation.type==="childList"){
display.textContent=input.textContent;
}
});
});
observer.observe(input,config);
</script>
이상한 점이 있다면, 내가 설정에서 서브 트리를 사용하고 싶지 않았을 때, 텍스트 노드에 어떻게 접근 할까? – user46
Text 노드에 대한 참조를 얻기 위해 Text 노드와 Element 자식을 모두 포함하는 요소의'childNodes' 컬렉션을 사용할 수 있습니다. 그러나 MutationObserver를 사용하면 사용자가 자신의'contenteditable' 부모와 상호 작용하여 새로운 (관찰되지 않은) Text 노드를 만들고 관찰중인 원래 Text 노드를 제거 할 수 있기 때문에 Text 노드를 직접 관찰하고 싶지는 않을 것입니다. – Touffy