在Firefox中运行event.path[n].id时,出现此错误。它可以在其他浏览器中使用。

最佳答案

path对象的Event属性是非标准的。标准等效项是 composedPath ,这是一种方法。但这是新的。
因此,您可能想尝试回退至此,例如:

var path = event.path || (event.composedPath && event.composedPath());
if (path) {
    // You got some path information
} else {
    // This browser doesn't supply path information
}
显然,如果浏览器不提供路径信息,它将不会为您提供路径信息,但它同时支持旧方法和新的标准方法,因此将尽其所能地跨浏览器。
例子:

document.getElementById("target").addEventListener("click", function(e) {
  // Just for demonstration purposes
  if (e.path) {
    if (e.composedPath) {
      console.log("Supports `path` and `composedPath`");
    } else {
      console.log("Supports `path` but not `composedPath`");
    }
  } else if (e.composedPath) {
    console.log("Supports `composedPath` (but not `path`)");
  } else {
    console.log("Supports neither `path` nor `composedPath`");
  }

  // Per the above, get the path if we can
  var path = e.path || (e.composedPath && e.composedPath());

  // Show it if we got it
  if (path) {
    console.log("Path (" + path.length + ")");
    Array.prototype.forEach.call(
      path,
      function(entry) {
        console.log(entry.nodeName);
      }
    );
  }
}, false);
<div id="target">Click me</div>

在我的测试中(2018年5月更新),IE11和Legacy Edge(v44或更早版本,从v79开始的Chromium更新之前)均不支持pathcomposedPath。 Firefox支持composedPath。 Chrome支持path(这是Google的原始想法)和composedPathAccording to MDN(截至2020年1月)除IE11之外,所有主要浏览器的最新版本均支持composedPath
因此,我认为您无法直接在IE11(或Legacy Edge)上获取路径信息。显然,您可以通过e.target.parentNode和每个后续的parentNode获取路径,它们通常是相同的,但是path/composedPath当然要指出的是,它并不总是相同的(如果在事件触发后但在之前修改了DOM,您的处理程序被致电)。

10-05 22:24