2013-10-16 4 views
0

jQuery 이벤트가 있습니다.) 페이지의 모든 DOM 요소에서 트리거됩니다. 지금은 문제가 없지만 DOM 선택에서 div (하위 div도 포함)를 제외하여 DOM을 트리거하는 이벤트를 방지해야합니다. jQuery의 unbind(), not()off()을 직접 $('#myDiv')에 시도했지만 이벤트가 계속 발생합니다.하나의 요소를 제외하고 DOM의 모든 요소를 ​​선택하는 방법은 무엇입니까?

사건 (들)을 트리거 코드 :

$("*").each(function() { 
     // here are events bound to every DOM in the page 
     $(this).mouseover(mouseover).mouseout(mouseout).click(click); 
    }); 

나는 또한 여전히

$("*:not(#myDiv)").each(function() { 
     // events 
     $(this).mouseover(mouseover).mouseout(mouseout).click(click); 
    }); 

으로 시도했다가 #myDiv에서 이벤트를 제거 할 수 없습니다.

html로 :

<div id="myDiv"> 
     <div class="data"> 
      <!-- --> 
     </div> 
     <div class="debug"> 
      <!-- --> 
     </div> 
     <div class="form"> 
      <!-- --> 
     </div> 

</div> 

무엇 #myDiv을 제외한 전체 DOM 선택하지만 을 할 수있는 가장 좋은 방법은, 그래서 이벤트를 바인딩 bind() 또는 on()를 사용할 수 있을까요?

참고 : DOM 트리에서 #myDiv을 제거하지 않고 선택에서 제외합니다. 당신은뿐만 아니라 아이들을 제외 할 경우

답변

2

당신은 이미이

$(function(){ 
    $('body > *').not('#myDiv') 
    .on('mouseover', function(){ //... }) 
    .on('click', function(){ //... }); 
}); 

An Example.

1

, 그렇게 명시 적으로 수행해야합니다 :

$("*:not(#myDiv):not(#myDiv *)") 
+0

을 시도해했지만, 사건은 여전히 ​​ – dede

+0

@dede 아, 그렇군요, 당신은 아이들을 제외 할 #myDiv 어린이에 대부분의 아마, 트리거 할 수 있습니다. 결정된. –

2

을 시도해보십시오 .not()

$("*").not("#myDiv").each(function() { 
     $(this).mouseover(mouseover).mouseout(mouseout).click(click); 
    }); 
1

을 시도해보십시오 :

$("*:not(#myDiv):not(#myDiv *)") 
    .mouseover(mouseover) 
    .mouseout(mouseout) 
    .click(click) 

이것은 #myDiv뿐만 아니라 #myDiv의 하위 요소 (제외)를 제외합니다.

관련 문제