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

文本節點只是普通的「節點」的情況下,並根據他們只是不能有事件偵聽器的DOM規範。這不是違反自然規律的事情,但它不是DOM的工作方式。