从克隆元素中删除隐藏的元素

Dev*_*mar 2 html javascript css jquery

此网页中隐藏了一些元素.现在,如果我想找到隐藏的元素:

var node =  jQuery('body')[0];
$(node).find(":hidden").remove();
Run Code Online (Sandbox Code Playgroud)

这将从主节点中删除隐藏的元素(这进一步改变了页面的布局).我想要做的是复制(克隆)未隐藏的元素.我正在尝试这个:

var clone = node.cloneNode(true);
$(clone).find(":hidden").remove();
Run Code Online (Sandbox Code Playgroud)

但这会删除克隆中的所有元素,而不仅仅是隐藏的元素(正如预期的那样,因为它不在dom中).从克隆中删除隐藏元素的最佳方法是什么?

Ben*_*son 5

我认为问题是,在将克隆重新插入DOM之前,所有这些都被认为是隐藏的.

也许您可以首先标记要删除的隐藏元素,然后克隆然后删除标记的元素:

var $node = ... ; // jQuery object of node to be cloned
$node.find(':hidden').addClass('markedForRemoval');

var $clone = $node.clone();

$clone.find('.markedForRemoval').remove();

// tidy up:
$clone.find('.markedForRemoval').removeClass('markedForRemoval');
$node.find('.markedForRemoval').removeClass('markedForRemoval');
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/BYossarian/6ysq8/