2010-02-23 2 views
4

div를 필터링에 사용했습니다. div 외부에있는 항목을 클릭하면 닫기를 원합니다. 빌드하려고하는 선택기는 기본적으로 특정 요소를 제외한 모든 요소를 ​​선택하고 해당 요소를 제외합니다. 여기 내가 시도하지만,이 단순화되어요소 및 요소를 제외하는 jQuery 선택기 하위 키

$('*:not(:has(.exclude *))').live('click', function() {HideFilter();}); 

페이지 구조 작업 얻을 수 없었던 것입니다 :

<div></div> 
<div> 
<div></div> 
<div> 
    <div class="exclude"><inputs></div> 
</div> 
<div></div> 
</div> 

그래서 난 div의 전부를 원하지만 하나 .exclude의 모든 내용이 이벤트에 포함됩니다. 나는 잠시 동안 여기에 있었고, 나는 도움이 필요하다.

답변

4

같은

$("body").click(function(e){ 
    if($(e.target).hasClass("exclude")){ 
    //show stuff 
    } else { 
    //hide stuff 
    } 
}); 

무엇인가? [편집자 [아하 나는 아는가?] 문제는 당신이 그 물건을 제외하더라도, 그 사건들은 여전히 ​​거품이 난다는 것이다. 이 같은

시도 뭔가 :

실제로 아무것도하지 않고 제외 된 것에 이벤트 전파를 중지해야

$('*').live('click', function(e) { 
    if (!$(e.target).is('.exclude, .exclude *')) 
    // do interesting stuff 
    } 
    return false; 
}); 
.

예 페이지 : http://gutfullofbeer.net/balloon.html

편집 나중에 3 년 업데이트는, 상기 .live() 방법은이 시점에서 오랫동안 사용되지 않습니다. 마지막 예제는 새 코드에서 다음과 같이 표시되어야합니다.

$('body').on('click', '*', function(e) { 
    if (!$(e.target).closest('.exclude').length) { 
    // do interesting stuff 
    } 
    return false; 
}); 
+0

나는 이것을 시험해 보았지만 여전히 모든 사건을 .exclude의 chlidren에 둔다. – zeal

+0

정확하게 그걸 타이핑 했는가? – Pointy

+0

예. 선택기가 올바르게 작동하는 것을 알 수 있습니다. 이벤트는 올바른 요소에만 적용됩니다. 하지만 내 div 아래의 요소도 클릭 따기해야합니다. – zeal

0

방법 약간 다른 전략에 대한 :

사업부 아무것도하지만, 클릭 할 때 주변의 모든 : 당신이

$('*:not(.exclude, .exclude *)').live(...) 

를 시도하는

+0

이렇게하면 셀렉터가 작동하지 않을 때 도움이됩니다. 감사. – zeal