Firefox和&中的MouseEvent.path等价物苹果浏览器

时间:2016-04-25 15:57:31

标签: javascript google-chrome firefox safari polymer-1.0

我正在使用Polymer 1.0,当点击Chrome中的按钮时,会生成MouseEvent。此MouseEvent对象具有path属性,该属性是单击按钮的父元素的有序数组。在Firefox&但是,Safari会生成一个click,它没有path属性。是否存在click对象的等效属性,它给出了相同的信息?

2 个答案:

答案 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。