javascript - 跨 Shadow DOM barrier 拦截点击事件

标签 javascript single-page-application polymer shadow-dom

在我的应用程序中,我拦截了对链接的点击并将它们转换为 AJAX 调用以实现单页应用程序。在 jQuery 中,这看起来像这样:

$('#main').on('click', 'a[href]', function(e) {
  if (e.which == 2 || e.metaKey) return; // don't capture new tab clicks
  /* stuff */
});

不过,最近我开始使用自定义元素和 Shadow DOM。上面的代码不适用于影子树中的 a 标签,因为点击事件被重定向到影子主机。

是否可以使上述代码工作以拦截影子树中发生的点击事件?如果不是,继续实现此功能的最佳做法是什么?

注意:我正在使用 Polymer Platform 来填充 Web 组件(尽管不是完整的 Polymer)。

最佳答案

在 Polymer ≥0.4.0 中你可以使用 /deep/组合器:

$('#main').on('click', '* /deep/ a[href]', function() {
  if (e.which == 2 || e.metaKey) return; // don't capture new tab clicks
  /* stuff */
});

注意:应谨慎使用此技术,因为它可能会影响所有组件的实现,包括 Web 平台的某些部分,如 <video>标签。

关于javascript - 跨 Shadow DOM barrier 拦截点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24802129/

相关文章:

polymer - 有人开发任何工具来生成元素文档吗?

java - 查找周围给定经纬度的纬度值(即: location) with specified radius using java program

javascript - Extjs MessageBox 覆盖,因此按钮向右对齐而不是居中对齐(Extjs 4.2)

AngularJS - 在加载任何 Controller 之前加载数据

javascript - 在 Angular 8 中导入 interactjs 1.7.2 不起作用

Nginx:在我的缓存中打一个洞没有按预期工作

webpack - Polymer 3 + Webpack -> 没有 'new' 就无法调用 PolymerElement

javascript - 数组内具有特定属性的 polymer 计数元素

javascript - 知道一个字符串是空的还是只包含空格

javascript - JQuery SlideUp - 图像背后的背景颜色