0
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;
    }

这条线是干什么用的?

4

3 回答 3

3
  1. 设置函数参数的e.returnValue = false;属性 returnValue。该return false;方法返回值为“false”的函数。

  2. 我的猜测是这样 - http://www.w3schools.com/dom/dom_nodetype.asp - 该函数将tgt(返回值)设置parentNode为除 ELEMENT_NODE 之外的任何节点

于 2013-06-29T08:26:08.613 回答
0
  1. 完全没有必要。

  2. 确保tgt始终是ElementNode,即使事件在包含的文本节点上触发。

于 2013-06-29T09:25:12.867 回答
0

我不确定问题 1,但我对问题 2 有一些看法。

“nodeType”表示节点的“整数”值,元素如“p, div”

将具有节点类型 1 “这是文本”将具有节点类型“3”。

代码:

            if ( tgt.nodeType !== 1 ) {
            tgt = tgt.parentNode; 
            }

我猜编码器想要处理“元素”上的事件,比如“p,div”标签。

示例:假设我们有以下 html 代码

            <p>Text in p</p>

因此,如果某些事件发生在“p”中的文本“p 中的文本”上,那么编码人员也希望将事件的目标元素作为“p”而不是其中的文本“p 中的文本”。现在考虑一个文本节点“DOMCharacterDataModified”的事件,当这个事件触发时,目标元素应该是“Text in p”,但我们的编码器希望目标元素是“p”标签。

同样,这是我的一个观点,可以具体回答这个问题

您可能想阅读的一个有用的链接

https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeType

谢谢

于 2013-06-29T09:18:41.780 回答