CSS伪元素上的事件监听器,例如:: after和:: before?

时间:2012-02-22 13:35:36

标签: javascript css pseudo-element

我有一个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;
}

5 个答案:

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

您可以打包divspan或适用于您案例的任何标记。 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
});

只是一个小技巧,以防您的代码为空