试图从网站上了解一些js代码

时间:2013-06-29 08:20:38

标签: javascript

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

这条线是什么?

3 个答案:

答案 0 :(得分:3)

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

  2. 我的猜测就是这个 - 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)

  1. 根本不需要。

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