在JavaScript中的“click”等事件回调中,“event.target”是否保证是/等于“this”的后代?

Dog*_*ert 2 javascript dom dom-events

如果我递归通过.parentNodeof event.target,我能保证到达吗this?规范中是否提到了这一点?

下面是一些代码来演示这一点,它将记录 ifevent.target是 的后代this

http://jsfiddle.net/Dogbert/aRLrG/

var isADescendentOf = function (child, parent) {
    if (child === parent) {
        return true;
    }
    if (child === null) {
        return false;
    }
    return isADescendentOf(child.parentNode, parent);
};


var nodes = document.querySelectorAll("*");

for (var i = 0; i < nodes.length; i++) {
    nodes[i].addEventListener("click", function (event) {
        console.log(isADescendentOf(event.target, this));
    });
}
Run Code Online (Sandbox Code Playgroud)

超文本标记语言

<div id="a">A
    <div id="b">B
        <div id="c">C
            <div id="d">D
                <div id="e">E</div> <span id="f">F</span>

                <button>B</button> <span>1<span>2<span>3
                </span></span>
                </span>
            </div>
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

use*_*621 5

是的。

该事件被分派到其目标EventTarget,并触发在那里找到的任何事件侦听器。然后,冒泡事件将触发通过沿着父链向上找到的任何其他事件侦听器EventTarget检查在每个后续事件上注册的任何事件侦听器EventTarget。这种向上传播将持续到并包括Document

http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-bubbling

请注意,还有非冒泡事件,例如focus,因此event.target == this.