Ev.DOMit = function (e) {
e = e ? e : window.event; // e IS passed when using attachEvent though ...
if (!e.target) {
e.target = e.srcElement;
}
if (!e.preventDefault) {
e.preventDefault = function () {
e.returnValue = false;
return false;
};
}
return e;
};
Ev.getTarget = function (e) {
e = Ev.DOMit(e);
var tgt = e.target;
if (tgt.nodeType !== 1) {
tgt = tgt.parentNode;
}
return tgt;
};
我在一个js文件中看到了上面的代码
问题:
1
e.returnValue = false;
return false;
因为我们已经有了这一行:e.returnValue = false;
,为什么我们需要在这里提供这一行:return false;
?
2。
if (tgt.nodeType !== 1) {
tgt = tgt.parentNode;
}
这条线是什么?
答案 0 :(得分:3)
e.returnValue = false;
设置函数参数的属性returnValue。 return false;
方法返回值为'false'的函数。
我的猜测就是这个 - http://www.w3schools.com/dom/dom_nodetype.asp - 函数将tgt
(返回值)设置为除{ELEMENT_NODE
parentNode
LI>
醇>
答案 1 :(得分:0)
我不确定问题1,但我对问题2有一些看法。
“nodeType”表示节点的“整数”值,元素如“p,div”
将具有节点类型1“这是文本”将具有节点类型“3”。
代码:
if ( tgt.nodeType !== 1 ) {
tgt = tgt.parentNode;
}
我猜编码器希望像“p,div”标签一样处理“元素”上的事件。
实施例: 假设我们有以下HTML代码
<p>Text in p</p>
因此,如果在“p”内的文本“text in p”中发生某些事件,那么编码器也希望将事件的目标元素作为“p”而不是其中的文本“Text in p”。 现在想一个文本节点“DOMCharacterDataModified”的事件,当此事件触发目标时 element应为“Text in p”,但我们的编码器希望将target元素作为“p”标记。
再次这是我的观点可能具体回答问题
您可能希望阅读的一个有用的链接
https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeType
由于
答案 2 :(得分:0)
根本不需要。
确保tgt
始终为ElementNode
,即使事件在包含的文本节点上触发。