只要所有的后代都有.remove或.removable类,我就需要能够删除所有具有.remove类的DOM对象。忽略空格。如果可以删除文本节点,则它必须只包含空格(制表符、换行符、空格)。
具有.remove和.removable的html对象可以是可以接收包括输入的类的任何类型的html实体。如果后代是除空格以外的任何内容的文本节点,则不能删除上升节点。
具有.remove类的对象可以具有带有.remove或.removable的子体。
子代可以与所讨论的节点相隔任何世代。
如果一个节点被移除,那么所有的子节点也会被移除。
(在示例中,没有保证上面的节点是body。)
示例:
版本1:(应该删除ex1)
<div id="div1" class="remove">
<input id="rad1" class="removable" type="radio" />
<img id="img1" src="img.gif" class="remove">
<div id="div2" class="removable">
</div>
</div>版本2:(ex1不应该被删除,因为div2包含一个文本节点,而不仅仅是空格,但是img1应该被删除)
<div id="div1" class="remove">
<input id="rad1" class="removable" type="radio" />
<img id="img1" src="img.gif" class="remove">
<div id="div2" class="removable">some text here
</div>
</div>版本3:(不应删除div1,因为img1不是.remove或.removeable)
<div id="div1" class="remove">
<input id="rad1" class="removable" type="radio" />
<img id="img1" src="img.gif">
<div id="div2" class="removable">
</div>
</div>发布于 2010-07-01 01:19:52
这个应该行得通:
$("body > div.remove").not(":has(:not(.remove))").filter(function() {
return $(this).text().trim().length == 0;
}).remove();实际上,:has(:not(.remove))选择器的积分属于Nick Craver,但他删除了答案,因为他忘记了filter()。我等了5分钟,但由于没有更新,即使我发布了一个微妙的提示,我只是发布了一个。
Here's a live demo。
发布于 2010-07-01 01:08:38
可能是像这样的东西?
$('div.remove').each(function() {
var remove = true;
$(this).children().each(function () {
if (!$(this).is('.remove')) { remove = false; }
if ($(this).is('div')) {
if (!$(this).html().test(/^\s+$/) { remove = false; }
}
}
if (remove == true) { $(this).remove(); }
});https://stackoverflow.com/questions/3151566
复制相似问题