爲什麼我不能將事件偵聽器添加到文本節點本身而不是p元素?textNode addEventListener
<p>childNode</p>
...
p.childNodes[0].addEventListener('click',function(){alert('ok')},false)
當我點擊childNode什麼也沒有發生在鉻
爲什麼我不能將事件偵聽器添加到文本節點本身而不是p元素?textNode addEventListener
<p>childNode</p>
...
p.childNodes[0].addEventListener('click',function(){alert('ok')},false)
當我點擊childNode什麼也沒有發生在鉻
文本節點根本不會觸發大多數事件:歷史上,元素有責任在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);
文本節點只是普通的「節點」的情況下,並根據他們只是不能有事件偵聽器的DOM規範。這不是違反自然規律的事情,但它不是DOM的工作方式。