2013-06-16 2 views
2

엘리먼트가 숨겨져 있는지 테스트하고 있습니다. 부모 엘리먼트가 숨겨져있는 경우 문제가 발생합니다. 그러면 아이도 숨김으로 간주되어 자식 엘리먼트가 추가되는 경우에도 추가됩니다. 내가 페이지로드에서이 스크립트를 실행엘리먼트가 숨겨져 있는지 테스트하기

function checkIfVisible() { 
    var checkLeft= $('#left').children('.module').filter(':hidden'); 
    if(checkLeft.length > 0) { 
    if(!$('.resetLeft').length) { 
     left.prepend('<span class="resetLeft">Reset Left Widgets</span>'); 
    } 
    } 

, 언제 적 요소를 숨길 수 클릭 할 아이들의 : 기술적으로 "없음 표시"아니다. 상위 요소가 숨겨져 있지만 숨겨진 하위 요소 (스타일 : 표시 안 함)가없는 경우 스크립트가 추가되지 않도록 미리 지정된 요소를 지정하지 않도록 스크립트를 중지 하시겠습니까?

기본적으로.

#left이 숨겨져 있고 (부모) 자녀가 없으면 resetLeft이 앞에 붙는 것을 원하지 않습니다. 그러나 #left이 숨겨져 있고 그 중 하나 이상의 자식이 display : none이면 앞에 붙습니다. 왼쪽이 숨겨져 있지 않더라도 나는이 일을해야한다.

var visible = $('#left').is(':hidden') && $('#left').children('.module').filter(function() { 
    return this.style.display === 'none'; 
}).length === 0; 

을하지만이 해킹처럼 보인다 :

답변

1

나는 블렌더가 말했던 것을 취했다. 그러나 나는 내가 원하는 방식으로 작동하도록 주변을 바 꾸었습니다. 나는이 나를 위해 훌륭하게 일

function checkIfVisible() { 
var checkLeft= 
    $('#left').is(':visible') 
    && 
    $('#left').children('.module').filter(':hidden').length > 0; 
    if(checkLeft) { 
     if(!$('.resetLeft').length) { 
     left.prepend('<span class="resetLeft">Reset Left Widgets</span>'); 
    } 
    } 

&& 및 논리 연산자를 ... 사용하고, 내가 한 모두는 #left 요소를 보여주는 클릭 기능에 기능을 추가했다!

3

이 그것을해야한다. 왜이 일을 강요 한거야?

+0

왜 '==='를 사용했는지 알려주실 수 있습니까? '=='도 완벽하게 작동합니다. – wuhcwdc

+2

@PankajGarg : 왜 안 되니? – Blender

+0

죄송 합니다만, 말씀하지 않으 셨습니다. – wuhcwdc

관련 문제