2011-01-25 6 views
4

p 요소 대신 텍스트 노드 자체에 이벤트 수신기를 추가 할 수없는 이유는 무엇입니까? textNode addEventListener

<p>childNode</p> 
... 
p.childNodes[0].addEventListener('click',function(){alert('ok')},false) 

내가 childNode에 아무것도 클릭

답변

6

텍스트 노드는 단순히 대부분의 이벤트를 발생시키지 않습니다. 역사적으로 요소는 HTML DOM에서이를 수행 할 책임이 있습니다. 그러나 텍스트 노드는 일부 이벤트 (IE < = 8 제외) : DOM mutation events을 발생시킵니다. 텍스트 노드에 특히 유용한 것은 DOMCharacterDataModified이며 텍스트 노드의 텍스트 변경을 감지하는 데 사용되며 브라우저 기반 편집기에서 유용 할 수 있습니다.

예 : http://www.jsfiddle.net/timdown/c6dHX/

HTML :

<div contenteditable="true" id="div">A text node, edit me</div> 

자바 스크립트 :

var textNode = document.getElementById("div").firstChild; 

textNode.addEventListener("DOMCharacterDataModified", function(evt) { 
    alert("Text changed from '" + evt.prevValue + "' to '" + evt.newValue + "'"); 
}, false); 
4

텍스트 노드 그냥 일반 "노드"인스턴스이며, 그들은 단지 이벤트 리스너를 가질 수없는 DOM 사양에 따라 크롬에서 발생합니다. 자연법을 위반하는 것이 아니라 DOM이 작동하는 방식 일뿐입니다.

관련 문제