我有一个div
元素,其CSS伪元素::before
用作关闭按钮(而不是使用实际按钮)。如何将事件监听器仅应用于 伪元素?
HTML
<div id="box"></div>
CSS
#box:before
{
background-image: url(close.png);
content: '';
display: block;
height: 20px;
position: absolute;
top: -10px;
right: -10px;
width: 20px;
}
#box
{
height: 100px;
width: 100px;
}
答案 0 :(得分:33)
没有。 DOM中不存在伪元素,因此它没有表示它的HTMLElementNode
对象。
答案 1 :(得分:26)
正在寻找解决方案并找到了这个帖子。现在想分享我的解决方案:
<强> CSS 强>
element { pointer-events: none; }
element::after { pointer-events: all; }
<强> JS 强>
element.addEventListener('click', function() { ... });
如果您不需要element
上的任何指针事件,则此功能正常。请在action中查看。
答案 2 :(得分:11)
jQuery中没有:before和:after选择器。但是,作为替代方法,您可以检查click事件的位置并检查它是否在您的伪元素上:
(我没有测试过这个)
式:
#mything {
width: 100px;
height: 100px;
position: relative;
background: blue;
}
#mything:after {
content: "x";
font-size: 10px;
position: absolute;
top: 0;
right: 0;
background: red;
width: 10px;
height: 10px;
}
的javascript:
$('#mything').click(function(e) {
if (e.clientX > $(this).offset().left + 90 &&
e.clientY < $(this).offset().top + 10) {
// do something
}
});
HTML:
<div id="mything">Foo</div>
答案 3 :(得分:2)
如果已知生成内容的位置和尺寸,您可以在元素本身上添加点击处理程序,并在处理之前检查relative mouse position。
这是不正常的,但可能。
答案 4 :(得分:0)
一般来说,没有其他人指出。 但是如果您的伪元素标记为空,例如glyphicon in bootstrap。
您可以打包div
或span
或适用于您案例的任何标记。 Glyphicons in bootstrap使用:before
但在页面上您可以看到它已捕获hover
个事件。
示例:
<span>
<span class="glyphicon glyphicon-asterisk" aria-hidden="true"></span>
</span>
假设您要将事件添加到上述glyphicon,您可以使用jquery parent selector
$('glyphicon').parent('span').click(function() {
// awesome things
});
只是一个小技巧,以防您的代码为空。