2011-01-25 8 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> 

はJavaScript:

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

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

Textノードは、単なる「ノード」の事例であり、DOMの仕様に応じて、彼らはただのイベントリスナーを持つことはできません。自然法に違反するものではありませんが、DOMの仕組みではありません。