javascript - 如何获取事件的原始文本节点?

标签 javascript

例如,我有以下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/

相关文章:

javascript - 将 JavaScript 链接添加到 Google 可视化饼图的饼图切片

javascript - jquery 代码的 TypeOf 问题

javascript - 为什么我的 Google App 脚本期望函数位于文件中而不是脚本中?

javascript - 如何在指令中进行递归?

javascript - 需要建议 : Use server time or user machine's time?

javascript - 将正则表达式匹配到字符串

javascript - 如何在 html 模板中使用 id 获取特定输入字段的值

javascript - Grunt - 如何从外部项目运行常见的外部任务

javascript - jQuery 循环遍历 PHP 数组的对象

php - 在选择上显示结果