jQuery mouseenter / leave不适用于li:nth-​​child():之前

时间:2018-04-26 11:55:41

标签: jquery css-selectors pseudo-element

在下面的代码中,我尝试使用jquery显示内容: text

如果删除:before,它就可以了!为什么jQuery不允许javascript这样做。

This post (7 years ago) 谈论我的问题,但它解决了问题而没有提供简单的解决方案。

今天没有简单的解决方案来定位:before

感谢您的帮助



$(document).ready(function() {
  $("div").mouseenter(function() {
    $("li:nth-child(2):before").show();
  });
  $("div").mouseleave(function() {
    $("li:nth-child(2):before").hide();
  });
});

li {
  display: none;
}

li:before {
  content: 'Show me';
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<ul>
  <li>This is a paragraph.</li>
  <li>This is a second paragraph.</li>
</ul>

<div style="width:30px; height:30px; background:black;cursor:pointer;position:absolute; top:50px;"></div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

伪元素的可见性取决于其主要元素display的可见性(即li:nth-child(2)状态)。因此,您必须在jQuery函数中添加一个相应的行来显示/隐藏主要元素:

&#13;
&#13;
$(document).ready(function(){
    $("div").mouseenter(function(){
        $("li:nth-child(2)").show();
        $("li:nth-child(2):before").show();
    });
    $("div").mouseleave(function(){
        $("li:nth-child(2)").hide();
        $("li:nth-child(2):before").hide();
    });
});
&#13;
li{display:none;}
li:before{content:'Show me';}
&#13;
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

</head>
<body>
<ul>
<li>This is a paragraph.</li>
<li>This is a second paragraph.</li>
</ul>

<div style="width:30px; height:30px; background:black;cursor:pointer;position:absolute; top:50px;"></div>


</body>
</html>
&#13;
&#13;
&#13;