2011-10-04 6 views
7

DOM 조각에서 숨겨진 요소를 모두 제거하고 싶지만 특정 클래스 아래에 숨겨진 모든 항목을 포함하고 싶습니다. 여기JQuery에서 일부 DOM 요소를 제외한 모든 요소를 ​​제거하는 방법은 무엇입니까?

당신은 가지고 (비) working example :

CSS
<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> 

: 그래서 li { "display:none" }

, 나는이 블록 클래스가 그 제외한 모든 숨겨진 항목을 제거 선택을 찾고 있어요 또는 블록 클래스 아래에 있습니다. 이 경우 예상 결과는 다음과 같습니다.

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

나는 놀았지만 : 성공하지 못했습니다.

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

Example


또는 더 포괄적가

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

방금 ​​하시겠습니까 확인하는 것입니다, 또는 부모를 여행해야합니까된다 나무? –

+0

전체 서브 트리가 그대로 유지되어야 함 – Ivan

답변

8

당신은 다음과 같은 의미 :

+0

'$ ('div : not (: has (video))')'를'.not'과'.has'로 대체 할 수 있습니까? –

+0

@IulianOnofrei, 다른 질문이있는 경우 페이지 상단의 "Ask Question"버튼을 사용하십시오 (SO 지침을 충족한다고 가정). – zzzzBov

0

당신은 실제로 단지 CSS를 사용할 수 있습니까?

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

는 다른 방법 :

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

그러나 $.fn.not()는 요소가 바로 부모가 특정 클래스가있는 경우, little more reliable than :not()

관련 문제