如果div没有子元素,则隐藏:before和:after伪元素

时间:2015-01-26 10:03:52

标签: jquery

这个想法是当这个特定的div是空的时候,我不想要显示伪元素。 (显然它将包含适当的逻辑)

我试过了

$('.my-feed--adventure').is(':parent') 
$('.my-feed--adventure').children().length > 0
$('.my-feed--adventure:has(div)')

但这似乎还不够,我猜测这是因为伪元素充当了孩子,但是我无法瞄准他们,所以我有点卡住了。

欢迎任何想法。

编辑:

我应该补充一点,div没有样式,充当容器,因此隐藏div可以隐藏这个实例中的伪元素。问题旨在选择具有这些伪元素的空div。

3 个答案:

答案 0 :(得分:1)

我实际上最终使用了上述两项努力的结合:

if ($('.my-feed--adventure:has(div)').length > 0) {
    // do nothing
} else {
    $('.my-feed--adventure').hide();
}

我在发布问题的过程中发现了这一点,但认为对于遇到同样问题的人来说这可能很有用。

答案 1 :(得分:1)

jQuery不能用于定位伪元素,因为它们不是DOM的一部分。删除它们而不影响包含元素的最简单方法是通过添加/删除类,如下所示:

#foo {
    position: absolute;
    width: 100px;
    height: 100px;
}
#foo:before {
    content: '';
    width: 20px;
    height: 20px;
    background-color: #C00;
    top: 0;
    right: 0;
}
#foo.no-pseudo:before {
    display: none;
}
if ($('.my-feed--adventure').is(':empty')) {
    $(this).addClass('no-pseudo');
};

答案 2 :(得分:0)

您可以尝试使用空选择器

$('.my-feed--adventure:empty').hide();

这会隐藏.my-feed - 没有孩子的冒险。

http://api.jquery.com/empty-selector/