我正在使用Polymer 1.0,当点击Chrome中的按钮时,会生成MouseEvent
。此MouseEvent
对象具有path
属性,该属性是单击按钮的父元素的有序数组。在Firefox&但是,Safari会生成一个click
,它没有path
属性。是否存在click
对象的等效属性,它给出了相同的信息?
答案 0 :(得分:35)
它不可用,但是如果你真的想拥有这个属性,那么你可以像这样扩展Event对象的原生原型:
if (!("path" in Event.prototype))
Object.defineProperty(Event.prototype, "path", {
get: function() {
var path = [];
var currentElem = this.target;
while (currentElem) {
path.push(currentElem);
currentElem = currentElem.parentElement;
}
if (path.indexOf(window) === -1 && path.indexOf(document) === -1)
path.push(document);
if (path.indexOf(window) === -1)
path.push(window);
return path;
}
});
但是,如果我是你,我不会扩展原型 - 我会创建一个如上所述的函数。
如果您只想覆盖那些类型的事件,我还会将Event.prototype更改为MouseEvent.prototype。
答案 1 :(得分:6)
似乎e.composedPath()方法可能是e.path
的跨浏览器版本。它适用于Chrome和Firefox。不确定Safari。