仅删除隐藏的类元素而不是所有元素

问题描述 投票:2回答:3
.slidercard:nth-of-type(1){
    display:none;
}
.slidercard:nth-of-type(2){
    display:none;
}

JS

var b = $('.slidercard').length;
console.log(b);  // result: 14 - that's ok

$('.slidercard').each(function(){
     if ($(this).css("display") == "none") {
        $(this).remove();
    }
});

var b = $('.slidercard').length;
console.log(b);  // result: 0

但结果应该是12因为只有两个slidercarddisplay:none

此外,在屏幕上我看到 - 所有.slidecard被删除,而不是只有两个。

jquery css
3个回答
4
投票

您的代码的问题在于,当您使用jQuery的每个方法进行迭代时,您将删除sildecard项。在每次迭代中,您将生成下一个项目第1和第2个 - 因此被CSS隐藏。第一个项目将始终隐藏,因此将被删除,从而导致所有项目被删除。使用jQuery选择器的更好方法是:

$('.slidercard:hidden').remove();

或者为了维持您的逻辑流程,可以选择:

var hiddenArr = [];
$('.slidercard').each(function(){
    if ($(this).css("display") == "none") {
        hiddenArr.push($(this));
    }
});
hiddenArr.forEach((element) => {element.remove();});

0
投票

正如@AlonGadot提到你的代码的问题是当你使用jQuery的每个方法迭代时,你正在删除sildecard项。

所以我给你一个替代的答案,你可以通过jquery用eq()方法隐藏元素,这样你就可以减少很多代码,而不是那么长的脚本来删除隐藏的元素:

var b = $('.slidercard').length;
console.log(b);  // result: 14 - that's ok

$(".slidercard").eq(0).hide().eq(1).hide()
$(".slidercard:hidden").remove()
    
b = $('.slidercard').length;
console.log(b);  // result: 0
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
<div class="slidercard">Paragraph 1</div>
<div class="slidercard">Paragraph 2</div>
<div class="slidercard">Paragraph 3</div>
<div class="slidercard">Paragraph 4</div>
<div class="slidercard">Paragraph 5</div>
<div class="slidercard">Paragraph 6</div>
<div class="slidercard">Paragraph 7</div>
<div class="slidercard">Paragraph 8</div>
<div class="slidercard">Paragraph 9</div>
<div class="slidercard">Paragraph 10</div>
<div class="slidercard">Paragraph 11</div>
<div class="slidercard">Paragraph 12</div>
<div class="slidercard">Paragraph 13</div>
<div class="slidercard">Paragraph 14</div>
</body>

0
投票

试试这个

$('.slidercard').find(':hidden').each(function(){
    $(this).remove();
});

每个都会传递隐藏的元素子

© www.soinside.com 2019 - 2024. All rights reserved.