2010-06-30 22 views
0

我需要能夠刪除具有.remove類的所有DOM對象,只要所有子代具有一類是.remove或.removable。忽略空白。如果可以刪除文本節點,它只能包含空格(製表符,換行符,空格)。刪除類.remove的所有HTML對象,其子代(如果有的話)都具有.remove類或類.removable

帶有.remove和.removable的html對象可以是任何類型的可以接收包括輸入的類的html實體。如果後代是除了空白以外的其他文本節點,則方向不能被刪除。

.remove類的對象可以具有.remove或.removable的後代。

後代可以是任何距離所討論的節點的世代。

如果一個節點被刪除,那麼所有的孩子都會被刪除。

(在實施例中沒有guarrentee,上面的節點是體。)

實例:

版本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不卸下襬臂或.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> 

回答

0

可能事端這樣?

$('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(); } 
}); 
1

這一個應該工作:

$("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

+0

非常好,答案和響應速度。非常感謝。 不幸的是,我不夠特別不幸。 我不能假定父母是身體,我也不能認爲外部對象是一個div。這個結構只是一個例子,它會從迭代到迭代顯着不同。 唯一的常量是要求刪除所有具有remove類的dom對象,並且其所有的子類也都具有remove類(忽略空格)。 如果任何孩子沒有附加的刪除類,那麼它和它的孩子不會被刪除。 – 2010-06-30 21:53:00

+0

另外我也意識到,我上面提到的問題實際上並沒有達到我所需要的,所以我會提出這個問題並嘗試一下這個問題。抱歉 – 2010-06-30 21:54:08

相關問題