Javascript Firefox中的MouseEvent.path等效项&;游猎
我使用的是Polymer 1.0,当点击Chrome中的按钮时,会生成一个Javascript Firefox中的MouseEvent.path等效项&;游猎,javascript,google-chrome,firefox,safari,polymer-1.0,Javascript,Google Chrome,Firefox,Safari,Polymer 1.0,我使用的是Polymer 1.0,当点击Chrome中的按钮时,会生成一个MouseEvent。此MouseEvent对象具有一个path属性,该属性是单击按钮的父元素的有序数组。但是,在Firefox和Safari中,会生成一个单击,它没有路径属性。click对象是否有提供相同信息的等效属性?该属性不可用,但如果您确实希望拥有此属性,则可以像这样扩展事件对象的本机原型: if (!("path" in Event.prototype)) Object.defineProperty(Event.
MouseEvent
。此MouseEvent
对象具有一个path
属性,该属性是单击按钮的父元素的有序数组。但是,在Firefox和Safari中,会生成一个单击
,它没有路径
属性。click
对象是否有提供相同信息的等效属性?该属性不可用,但如果您确实希望拥有此属性,则可以像这样扩展事件对象的本机原型:
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。该方法可能是跨浏览器版本的
e.path
。它在Chrome和Firefox中工作。不太清楚狩猎旅行。AWESOMESOUP。不完全是我想要的答案,但完美地解决了我的问题。出于好奇,@wogsland,什么答案,或答案类型,你希望得到什么?我以为在Firefox中创建的对象中会有一个等价的属性,我还没有猜到它的名字。@wogsland你可以将这个答案与检查Event.prototype.composedPath的存在结合起来,并获得两个方面的最佳效果:与此代码的最大兼容性仅在IE/Edge.Perfect中执行。适用于所有三种情况。请注意,它不适用于Edge或IE: