例如,我有以下html
<HTML>
<HEAD>
<script type="text/javascript">
function trackElement(event){
event=event||window.event;
var target = event.explicitOriginalTarget||event.srcElement||document.activeElement;
var targetText = target.nodeValue||target.innerHTML;
alert(targetText);
}
</script>
</HEAD>
<BODY onclick="trackElement(event)">
<div>bbbbbb<div>cccccc</div>dddddddddd<div>eeeeeeeee</div></div>
</BODY>
</HTML>
当我点击“bbbbbb”时,
在 Firefox 上,我收到“
bbbbbb
”警报 这正是我所期望的。但是在 IE 上,我得到了 ”
bbbbbb<div>cccccc</div>dddddddddd<div>eeeeeeeee</div>
“
当我点击“dddddddddd”时,
在 Firefox 上,我得到“
dddddddddd
” 提醒这正是我的 预计。但是在 IE 上,我得到了 ”
bbbbbb<div>cccccc</div>dddddddddd<div>eeeeeeeee</div>
“
如何在 IE 上使用 Firefox 获得相同的结果?
最佳答案
这是因为属性“nodeValue”为元素节点返回 null,因此您返回innerHtml,它将包含元素内的整个 html 代码。在 Internet Explorer 中,您的目标由 event.srcElement 分配,因此是一个元素节点,而在 FF 中它是一个文本节点。解决该问题的一种方法是使用以下代码:
function trackElement(event){
event=event||window.event;
var targetText;
var target = event.explicitOriginalTarget||event.srcElement||document.activeElement;
if(target.nodeType==3){
targetText = target.nodeValue
}else{
targetText = target.firstChild.nodeValue;
}
alert(targetText);
}
这样,如果您的作业分配了一个文本节点,您将返回该值,并且为元素节点分配第一个子节点(这就是您所追求的)的文本。
编辑:事实证明我错了。问题是 event.srcElement 返回被单击的整个元素(event.explicitOriginalTarget 是 mozilla 特定的)。从那里,您需要检索文本。如果元素中有多个文本,我认为没有简单的方法可以做到这一点。如果只有一个,则需要迭代子节点并显示文本节点。
关于javascript - 如何获取事件的原始文本节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/580656/