Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox中的MouseEvent.path等效项&;游猎_Javascript_Google Chrome_Firefox_Safari_Polymer 1.0 - Fatal编程技术网

Javascript Firefox中的MouseEvent.path等效项&;游猎

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.

我使用的是Polymer 1.0,当点击Chrome中的按钮时,会生成一个
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: