1

.parentNode如果我通过of递归event.target,我能保证到达this吗?规范中的任何地方都提到了这一点吗?

这是一些代码来演示这一点,它将记录 ifevent.targetthis

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

HTML

<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>
4

1 回答 1

4

是的。

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

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

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

于 2013-06-05T06:35:38.603 回答