jquery - 仅删除隐藏的类元素而不是全部

标签 jquery css

.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 的每个方法进行迭代时,您正在删除 sildecard 元素。每次迭代时,您都会将下一个元素设置为第一个和第二个 - 因此被 CSS 隐藏。第一个元素将始终被隐藏并因此被删除,从而导致所有元素都被删除。 使用 jQuery 选择器的更好方法是:

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

或者为了维持逻辑流程,替代方案可以是:

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

关于jquery - 仅删除隐藏的类元素而不是全部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49024827/

相关文章:

javascript - JS 不是保存在 DOM 中的对象吗?

html - 从下到上显示 <li>

javascript - 单击文本框时,文本框的边框应该是透明的

javascript - 打开一个 DIVS 时关闭所有其他 DIVS

jquery - input[type=text] 在 x 个字符后垂直增长输入并垂直对齐文本

javascript - Bootstrap 3 无序列表显示不正确

jquery - 检测水平滚动结束

javascript - 如何识别第 3 方 iframe 中的 Ajax 更新

javascript - Framework7 在 View 中切换 View ?

javascript - jQuery 动画无法正常工作