Javascript 如何从整个文档中删除不可见的元素?

Javascript 如何从整个文档中删除不可见的元素?,javascript,jquery,dom,Javascript,Jquery,Dom,我想使用Javascript和JQuery复制网页的整个html,并删除用户看不到的所有元素。这就是我迄今为止所尝试的: $('html').not(':visible').remove() 然而,它似乎不起作用。有人知道我如何做到这一点吗?您正在删除不可见的html元素。你应该移除它的子对象 试试这个 $('html').children().not(':visible').remove() 编辑: 正如Barmar所说,这只会删除html的直接子元素。使用其他答案删除所有元素。现在,您仅

我想使用Javascript和JQuery复制网页的整个html,并删除用户看不到的所有元素。这就是我迄今为止所尝试的:

$('html').not(':visible').remove()

然而,它似乎不起作用。有人知道我如何做到这一点吗?

您正在删除不可见的html元素。你应该移除它的子对象

试试这个

$('html').children().not(':visible').remove()
编辑:
正如Barmar所说,这只会删除html的直接子元素。使用其他答案删除所有元素。

现在,您仅使用选择器针对
元素。您需要遍历所有元素并检查它们的可见性,如下所示:

$('*').each(function(){
    if($(this).not(':visible')){
        $(this).remove();
    }
});
更简洁的做法是只针对隐藏元素并将其删除:

$('*:hidden').remove();
jQueryAPI引用指出,如果元素占用文档中的空间,则认为它们是可见的。因此,高度和宽度大于0的图元被视为可见。这意味着,如果您在删除可见内容时遇到上述代码问题,我们应该查看计算的CSS

$('*').each(function(){
    if($(this).css('visibility') == 'hidden' || $(this).css('display') == 'none'){
        $(this).remove()
    }
});
这应该做到:

$("body :hidden").remove();

那是不对的
.children()
只查找直系子代,而不是所有子代。@Barmar是的,您是对的。那么谁投票支持我的答案呢?这并不是针对一个元素这似乎删除了很多实际可见的东西。是的,它认为
中的所有东西都是不可见的,因为它没有渲染。需要将其限制在主体上。这消除了所有CSS的消失,但它仍然删除了用户实际可见的元素。您可以制作一个SQLFIDLE来演示这个问题吗?这似乎也删除了太多。样式为
display的元素:none与具有<代码>可见性:隐藏
的元素不同。你能澄清你的目标吗?两者对用户都不可见,但它们的目标与jquery不同。我需要删除所有对用户不可见的内容,因此
display:none
visibility:hidden
。据我所知,它只处理第一个案子。但现在的问题是,它删除的东西既不是
隐藏的
也不是
显示:无
@BespokeSquirrel不用担心,你很快就会到达那里!