jQuery .on 应用于所有中间节点
jQuery .on to apply to all intermediate nodes
给定这样的文档:
<body><div class="a"><div class="b"><div class="c"></div></div></div></body>
(在示例中,一切都是div - 但它们可以是任何东西)
我想为被单击的div 及其所有父级的
即,如果您单击.c
我希望该事件触发.c
然后.b
然后.a
如果单击.b
则事件应触发.b
然后.a
注意:在这种情况下,我正在使用$('body').on('click', function(event){...})
出于与问题无关的原因,在我的实例中,使用 $('div').click(function(event){...})
不是一个实用的选择。
我尝试从事件处理程序中遍历 dom 树,该处理器有效,但事件对象包含错误的偏移量。
所以我的问题是 - 是否有一种内置的方法可以使用上述模式调用事件处理程序。
或者失败了 - 是否有一种内置的方式来操作给定"from"和"to"元素的事件对象的偏移量。即类似AdjustOffsets(event, $target, $target.parent())
或者失败了 - 我需要什么逻辑才能手动执行此操作。
在最后一种情况下,我有此代码,但它不起作用。
if ($target.css('position') != 'static' && $target.css('position') != '')
{
event.clientX += $target.css('left');
event.clientY += $target.css('top');
}
event.clientX += $target.css('borderLeftWidth');
event.clientY += $target.css('borderTopWidth');
event.clientX += $target.css('marginLeft');
event.clientY += $target.css('marginTop');
$target = $target.parent();
event.clientX += $target.css('paddingLeft');
event.clientY += $target.css('paddingTop');
此操作失败,因为 CSS 属性包含单位。单位很容易剥离,但我相信有些浏览器在这里返回原始单位(例如可能是em
或pt
),而clientX
属性必须是像素 - 所以转换是必要的。
这也是我最好的猜测,可能错过了一千个晦涩难懂的 css3 案例 - 因此我对某种内置方法的雄心勃勃的渴望。
我不太确定你的问题是什么。您是否希望单击事件触发,例如div.a
当您单击div.c
?㞖。这应该已经发生了,因为默认情况下点击事件会通过 DOM 冒泡。
看看这个小提琴,你会发现如果你点击div.c
,div.b
和div.a
的点击事件也会被触发。
编辑:新小提琴,只需 1 on()
您可以在事件处理程序中尝试递归触发器,如下所示:
$(document).on('click', '.someClass', function(e){
// .. do stuff
$(this).parent('.someClass').trigger('click');
});
- 节点导出返回一个空对象
- 可以前端maven插件使用节点,npm已经安装
- 在jstree中,如何将指定的节点集中到大型树上
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 如何处理node.js节点mongodb中的连接和查询队列
- 将DOM节点值与字符串Javascript进行比较
- 节点fs.stat名称未定义
- 无法安装节点sass相关性
- 节点协同与生成器和Promise并行流量控制
- 节点-如何在POST路由中间件中访问请求
- jQuery .on 应用于所有中间节点
- “错误:连接 ENOENT”当节点快速中间件发出 POST 请求(使用节点请求库)时
- 如何跳过或跳过中间件?(节点)
- 拆分文本节点在中间
- D3.js使节点出现在中间;反弹”;