2011-10-04 48 views
7

我想刪除一塊DOM中的所有隱藏元素,但保留某些類下的所有(包含隱藏項)。如何刪除JQuery中的所有DOM元素?

這裏有一個(非)working example

<div id="init"> 
    <input type="hidden" name="x" value="y" /> 
    <ul> 
     <li>Hello</li> 
     <li>Bye</li> 
     <li class="block"> 
      <ol> 
       <li>First</li> 
       <li>Second</li> 
       <li>Third</li> 
      </ol> 
     </li> 
     <li>Test</li> 
    </ul> 
</div> 

CSS:li { "display:none" }

所以,我在尋找,去除除了那些有類的所有隱藏的項目選擇或正在類別類別下。在這種情況下,預期的結果是:

<div id="init"> 
    <ul> 
     <li class="block"> 
      <ol> 
       <li>First</li> 
       <li>Second</li> 
       <li>Third</li> 
      </ol> 
     </li> 
    </ul> 
</div> 

我一直在玩:不是運營商,但沒有成功。

+0

你只是想檢查元素直接父有一個特定的類,或者你需要去旅行了父(s)樹? –

+0

整個子樹必須保持不變 – Ivan

回答

8

你的意思是這樣嗎?

$(':hidden').not('.block, .block *').remove(); 

或者:

$(':hidden:not(.block, .block *)').remove(); 

$.fn.not()little more reliable than :not()

+0

是否有可能用'.not'和'.has'來代替'$('div:not(:has(video))')'? –

+0

@IulianOnofrei,如果您有其他問題,請使用頁面頂部的「Ask Question」按鈕(假設它符合SO指導原則)。 – zzzzBov

0

實際上,你可以只使用CSS:

li.block, li.block li { display: block } 

Example


或者更全面

li.block, li.block>* * { display: block }