jQuery에서 요소가 숨겨져 있는지 어떻게 확인합니까?


7738

그것은 요소의 표시를 전환하는 기능을 사용하는 것이 가능하다 .hide(), .show()또는 .toggle()?

요소가 visible또는 인지 어떻게 테스트 hidden합니까?


49
그것의 가치 (심지어 모든이 시간 이후) 언급, 그 $(element).is(":visible"),하지만 jQuery를 1.3.2를 들어, 아래 jQuery를 1.4.4에 대한 작품 인터넷 & NBSP; NBSP 탐색기 및 8 . 이것은 Tsvetomir Tsonev의 유용한 테스트 스 니펫을 사용하여 테스트 할 수 있습니다 . jQuery 버전을 변경하여 각 버전에서 테스트하십시오.
Reuben

2
이것은 다른 질문이지만 관련이 있습니다 : stackoverflow.com/questions/17425543/…
Mark Schultheiss

답변:


9395

질문은 단일 요소를 참조하므로이 코드가 더 적합 할 수 있습니다.

// Checks CSS content for display:[none|block], ignores visibility:[true|false]
$(element).is(":visible");

// The same works with hidden
$(element).is(":hidden");

twernt의 제안 과 동일 하지만 단일 요소에 적용됩니다. 그리고 JQuery와 FAQ에서 권장하는 알고리즘을 일치합니다 .

jQuery의 is ()를 사용하여 선택한 요소를 다른 요소, 선택기 또는 jQuery 객체로 확인합니다. 이 메소드는 DOM 요소를 따라 이동하여 일치하는 항목을 찾고 전달 된 매개 변수를 충족시킵니다. 일치하는 것이 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.


164
이 해결책은 visible=false과 의 혼란을 조장하는 것처럼 보인다 display:none. 티끌의 솔루션은 명확를 확인 의도 코더를 illistrates 반면 display:none; (숨기기 및 표시 display:none하지 않는 컨트롤에 대한 언급을 통해 visible=true)
kralco626

93
그것은 정확하지만 :visiblechiborg가 지적한 것처럼 부모 요소가 보이는지 확인합니다.
Tsvetomir Tsonev

45
당신은 요점이 있습니다-코드가 display속성 만 검사한다는 것을 분명히 할 것 입니다. 원래의 질문은 show()and hide()이고 그들이 설정 한 것으로 가정 display하면 내 대답은 정확합니다. IE7과 작동하는 방법은 다음과 같습니다 . jsfiddle.net/MWZss 테스트 스 니펫 ;
Tsvetomir Tsonev 님이

53
나는 역 논리 단어가 더 낫다는 것을 실제로 발견했다 :! $ ( 'selector'). is ( ': hidden'); 몇 가지 이유. 시도해 볼 가치가 있습니다.
Kzqai

21
다음은 간단한 벤치 마크 테스트는 정규 표현식에 대해 ()되어있다 : jsperf.com/jquery-is-vs-regexp-for-css-visibility . 결론 : 성능이 부족한 경우 is () 대신 regexp를 사용하십시오 (is ()는 실제 요소를보기 전에 모든 숨겨진 노드를 먼저 찾기 때문에).
Max Leske

1457

hidden선택기 를 사용할 수 있습니다 .

// Matches all elements that are hidden
$('element:hidden')

그리고 visible선택기 :

// Matches all elements that are visible
$('element:visible')

67
이 프레젠테이션에는 성능 관련 팁이 있습니다. addyosmani.com/jqprovenperformance
codecraig

27
21-28 페이지에는 다른 선택기와 비교하여 : hidden 또는 : visible이 얼마나 느린지를 보여줍니다. 이것을 지적 해 주셔서 감사합니다.
Etienne Dupuis

109
몇 가지 요소를 다룰 때 아주 적은 일이 진행되고있을 때 (즉, 엄청나게 큰 사례)-시간 문제는 엄청나게 사소한 문제입니다. 아, 아냐! 19ms 대신 42ms 걸렸습니다 !!!
vbullinger

16
이 선택기를 사용하여 요소를 포유 동물로 전환하고 있습니다. $ ( 'element : hidden')은 항상 저에게 진실입니다!
ZoomIn

15
@cwingrav 문서를 다시 읽고 싶을 수도 있습니다. : hidden은 모든 요소에 적용됩니다. 양식 요소 type="hidden"는 : hidden을 트리거 할 수있는 경우입니다. 높이와 너비가없는 요소,가있는 요소 display: none및 숨겨진 조상이있는 요소도 : hidden으로 간주됩니다.
Joshua Walsh

948
if ( $(element).css('display') == 'none' || $(element).css("visibility") == "hidden"){
    // 'element' is hidden
}

위의 방법은 부모의 가시성을 고려하지 않습니다. 부모도 고려하려면 .is(":hidden")또는 을 사용해야합니다 .is(":visible").

예를 들어

<div id="div1" style="display:none">
  <div id="div2" style="display:block">Div2</div>
</div>

위의 방법은 div2보이지 :visible않지만 가시적 인 것으로 간주됩니다 . 그러나 위의 경우 많은 경우에 유용 할 수 있습니다. 특히 숨겨진 조건에서 :visible작동하지 않기 때문에 숨겨진 부모에 오류 div가 있는지 확인해야 할 때 특히 유용 합니다.


131
단일 요소의 표시 속성 만 확인합니다. : visible 속성은 부모 요소의 가시성을 확인합니다.
chiborg

16
이것은 IE 8로 테스트 할 때 저에게
효과적이었습니다.

20
@chiborg 네,하지만 때로는 그게 당신이 원하는 것이고 jQuery가 어떻게 "영리한"지에 대한 어려운 방법을 배워야했습니다.
Casey

9
이 문제되는 것은 하나의 요소에 대해하고 사용하는 것입니다, 질문에 대답하지 hide(), show()그리고 toggle()대부분은 이미 말했듯이, 우리가 사용해야하지만, 기능 :visible:hidden의사 클래스를.
Jimmy Knoot

2
이 답변은 요소가 존재하지만 detach () 후와 같이 현재 페이지에없는 경우에 사용할 수 있습니다.
atheaos

526

이 답변들 중 어느 것도 내가 질문으로 이해 한 것에 대해 언급하지visibility: hidden 않았는데, 내가 찾은 것은 "내가 가진 항목을 어떻게 처리 합니까?" . 어느 쪽 :visible도 아니다 :hidden그들은 모두 문서에 따라 디스플레이를 찾고,이 처리되지 않습니다. 내가 결정할 수있는 한 CSS 가시성을 처리 할 수있는 선택기가 없습니다. 다음은 해결 방법입니다 (표준 jQuery 선택기, 더 요약 된 구문이있을 수 있음).

$(".item").each(function() {
    if ($(this).css("visibility") == "hidden") {
        // handle non visible state
    } else {
        // handle visible state
    }
});

18
이 답변은 visibility문자 그대로 처리하는 것이 좋지만 문제는 How you would test if an element has been hidden or shown using jQuery?입니다. jQuery를 사용한다는 것은 display속성을 의미 합니다.
MarioDS

10
배치에서 공간을 여전히 소비하므로 요소가 visibility: hidden있거나 표시 opacity: 0되는 것으로 간주됩니다. 참조 의해 답변 페드로 RainhojQuery를 문서 상의 :visible선택합니다.
awe

9
노드의 부모를 확인하기 위해 DOM을 탐색해야합니다. 그렇지 않으면 쓸모가 없습니다.
vsync

389

에서 어떻게 전환 요소의 상태를 확인할 수 있습니까?


:visible:hidden선택기 를 사용하여 요소 축소 여부를 확인할 수 있습니다 .

var isVisible = $('#myDiv').is(':visible');
var isHidden = $('#myDiv').is(':hidden');

가시성에 따라 요소에 단순히 작용하는 경우 선택기 표현식에 포함 :visible시키거나 포함시킬 수 있습니다 :hidden. 예를 들면 다음과 같습니다.

 $('#myDiv:visible').animate({left: '+=200px'}, 'slow');

4
아무 대답이 요소가 같은, 눈에 보이는 창문에서 멀리 이동하는 경우를 언급하지 왜 궁금 top:-1000px그것을 추측 ... 가장자리의 경우를 것
jazzcat

294

어떤 것이 눈에 보이는지 아닌지를 확인하는 경우, 즉시 바로 가서 다른 것을 할 것입니다. jQuery 체인은 이것을 쉽게 만듭니다.

따라서 선택기가 있고 표시되거나 숨겨져있는 경우에만 조치를 수행하려는 경우 수행하려는 조치 와 함께 체인을 사용 filter(":visible")하거나 filter(":hidden")연결할 수 있습니다.

따라서 if다음과 같은 진술 대신 :

if ($('#btnUpdate').is(":visible"))
{
     $('#btnUpdate').animate({ width: "toggle" });   // Hide button
}

또는 더 효율적이지만 더 추악합니다.

var button = $('#btnUpdate');
if (button.is(":visible"))
{
     button.animate({ width: "toggle" });   // Hide button
}

한 줄에 모두 할 수 있습니다.

$('#btnUpdate').filter(":visible").animate({ width: "toggle" });

25
예제에서 사용 된 스 니펫에서 DOM 노드를 추출한 후 다시 찾아야 할 이유가 없습니다. 그냥하는 것이 좋습니다 : var $ button = $ ( '# btnUpdate'); 그런 다음 If 식에서 $ (button) 대신 $ button을 사용하십시오. jQuery 객체를 캐싱 할 수있는 이점이 있습니다.
LocalPCGuy

1
다음은 간단한 예입니다 jquerypot.com/…
Ketan Savaliya

242

:visible에 따라 선택 JQuery와 문서 :

  • CSS display값은 none입니다.
  • 그것들은을 가진 폼 요소들입니다 type="hidden".
  • 너비와 높이는 명시 적으로 0으로 설정됩니다.
  • 조상 요소가 숨겨져 있으므로 요소가 페이지에 표시되지 않습니다.

배치에서 공간을 여전히 소비하므로 요소가 visibility: hidden있거나 표시 opacity: 0되는 것으로 간주됩니다.

display != none부모 가시성을 무시하고 요소가 보이는지 ( ) 확인하고 싶을 때 수행하는 .css("display") == 'none'것이 더 빠를뿐만 아니라 가시성 검사를 올바르게 반환 하기 때문에 어떤 경우에는 유용하고 다른 경우에는 쓸모 가 없습니다.

표시 대신 가시성을 확인하려면 다음을 사용해야합니다 .css("visibility") == "hidden"..

추가 jQuery 참고 사항도 고려 하십시오 .

:visiblejQuery 확장이며 CSS 스펙의 일부가 아니기 때문에 사용하는 쿼리 :visible는 기본 DOM querySelectorAll()메소드가 제공하는 성능 향상을 활용할 수 없습니다 . :visible요소를 선택할 때 최상의 성능을 얻으려면 먼저 순수한 CSS 선택기를 사용하여 요소를 선택한 다음을 사용하십시오 .filter(":visible").

또한 성능이 염려되면 지금 확인 하십시오 . 성능 표시 / 숨기기 (2010-05-04)를 확인하십시오. 그리고 다른 방법을 사용하여 요소를 표시하거나 숨 깁니다.


214

이것은 저에게 효과적이며 div를 숨기거나 볼 수 있도록 사용 show()하고 hide()있습니다.

if( $(this).css('display') == 'none' ){
    /* your code goes here */
} else {
    /* alternate logic   */
}

213

어떻게 요소의 가시성 및 jQuery를 작동 ;

요소는 숨겨진 될 수있다 display:none, visibility:hidden또는 opacity:0. 그 방법의 차이점 :

  • display:none 요소를 숨기고 공간을 차지하지 않습니다.
  • visibility:hidden 요소를 숨기지 만 여전히 레이아웃에서 공간을 차지합니다.
  • opacity:0요소를 "visibility : hidden"으로 숨기고 여전히 레이아웃에서 공간을 차지합니다. 유일한 차이점은 불투명도로 인해 요소를 부분적으로 투명하게 만들 수 있다는 것입니다.

    if ($('.target').is(':hidden')) {
      $('.target').show();
    } else {
      $('.target').hide();
    }
    if ($('.target').is(':visible')) {
      $('.target').hide();
    } else {
      $('.target').show();
    }
    
    if ($('.target-visibility').css('visibility') == 'hidden') {
      $('.target-visibility').css({
        visibility: "visible",
        display: ""
      });
    } else {
      $('.target-visibility').css({
        visibility: "hidden",
        display: ""
      });
    }
    
    if ($('.target-visibility').css('opacity') == "0") {
      $('.target-visibility').css({
        opacity: "1",
        display: ""
      });
    } else {
      $('.target-visibility').css({
        opacity: "0",
        display: ""
      });
    }

    유용한 jQuery 토글 메소드 :

    $('.click').click(function() {
      $('.target').toggle();
    });
    
    $('.click').click(function() {
      $('.target').slideToggle();
    });
    
    $('.click').click(function() {
      $('.target').fadeToggle();
    });

20
visibility:hidden와 (과 opacity:0)의 또 다른 차이점 은 요소가 여전히 클릭 수와 같은 이벤트에 응답한다는 것입니다 opacity:0. 파일 업로드를 위해 사용자 지정 버튼을 만드는 트릭을 배웠습니다.
urraka

1
또한 불투명도 : 0으로 입력을 숨기면 탭 키로 여전히 선택됩니다.
YangombiUmpakati

161

일반 JavaScript를 사용하여이 작업을 수행 할 수도 있습니다.

function isRendered(domObj) {
    if ((domObj.nodeType != 1) || (domObj == document.body)) {
        return true;
    }
    if (domObj.currentStyle && domObj.currentStyle["display"] != "none" && domObj.currentStyle["visibility"] != "hidden") {
        return isRendered(domObj.parentNode);
    } else if (window.getComputedStyle) {
        var cs = document.defaultView.getComputedStyle(domObj, null);
        if (cs.getPropertyValue("display") != "none" && cs.getPropertyValue("visibility") != "hidden") {
            return isRendered(domObj.parentNode);
        }
    }
    return false;
}

노트:

  1. 어디서나 작동

  2. 중첩 요소에 적용

  3. CSS 및 인라인 스타일에서 작동

  4. 프레임 워크가 필요하지 않습니다


6
jQuery와 약간 다르게 작동합니다. 보이는 것으로 간주 visibility: hidden됩니다 .
alex

4
위의 코드를 변경하여 (아마도 어리석은) jQuery 동작을 모방하는 것은 쉽습니다. . . . . isRendered (o) {if ((o.nodeType! = 1) || (o == document.body)) {return true;} if (o.currentStyle && o.currentStyle [ "display"]! = "none") {return isRendered (o.parentNode);} 그렇지 않으면 if (window.getComputedStyle) {if (document.defaultView.getComputedStyle (o, null) .getPropertyValue ( "display")! = "none") {return isRendered (o.parentNode );}} 거짓을 반환;}
Matt Brock

3
물론 코드를 스캔하지 않고 이것을 사용하는 사용자의 이익을 위해 추가했습니다. :)
alex

160

CSS 클래스를 사용 .hide { display: none!important; }합니다.

숨기거나 보여주기 위해을 호출 .addClass("hide")/.removeClass("hide")합니다. 가시성을 확인하기 위해을 사용 .hasClass("hide")합니다.

사용하지 .toggle()않거나 .animate()방법을 계획하지 않은 경우 요소를 확인 / 숨기기 / 표시하는 간단하고 명확한 방법입니다.


11
.hasClass('hide')부모의 조상이 숨겨져 있는지 확인하지 않습니다 (숨겨 지기도 함). 를 확인하여 올바르게 작동하도록 할 수는 .closest('.hide').length > 0있지만 휠을 재발 명하는 이유는 무엇입니까?
nbrooks

1
요소가 HTML에 표시되면 반환을 제안하는 변형, 요소가 자바 스크립트 코드 /보기 엔진에 의해 직접 숨겨진 경우 내 변형이 반환됩니다. 부모 요소를 숨겨서는 안된다는 것을 알고 있다면 .hasClass ()를 사용하여 더 엄격하고 향후 버그를 방지하십시오. 가시성뿐만 아니라 요소 상태도 확인하려면 .hasClass ()도 사용하십시오. 다른 경우에는 .closest ()가 더 좋습니다.
Evgeny Levin

1
왜 .is ( ": visible")을 사용하지 않습니까?
dont_trust_me

138

데모 링크

$('#clickme').click(function() {
  $('#book').toggle('slow', function() {
    // Animation complete.
    alert($('#book').is(":visible")); //<--- TRUE if Visible False if Hidden
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="clickme">
  Click here
</div>
<img id="book" src="https://upload.wikimedia.org/wikipedia/commons/8/87/Google_Chrome_icon_%282011%29.png" alt="" width="300"/>

출처:

Blogger Plug n Play-jQuery 도구 및 위젯 : jQuery를 사용하여 요소가 숨겨져 있는지 또는 표시되는지 확인하는 방법


1
@Adrew 그러나이 링크는이 기능의 실제 예를 보여줍니다. 나는 실제 답변이 텍스트의 전체 페이지를
Code Spy

133

다음 과 같이 간단히 hiddenor visible속성을 사용할 수 있습니다 .

$('element:hidden')
$('element:visible')

또는 당신은과 같은 단순화 할 수 IS 다음과 같다.

$(element).is(":visible")

130

ebdiv로 설정해야합니다 style="display:none;". 표시 및 숨기기 모두에 대해 작동합니다.

$(document).ready(function(){
    $("#eb").click(function(){
        $("#ebdiv").toggle();
    });    
});

118

고려해야 할 또 다른 대답은 요소를 숨기고 jQuery 를 사용해야 하지만 실제로 숨기는 대신 전체 요소를 제거하지만 HTML 내용과 태그 자체를 jQuery 변수에 복사 한 다음 normal을 사용하여 화면에 이러한 태그가 있는지 테스트하기 만하면 if (!$('#thetagname').length)됩니다.


100

:hiddenjQuery 에서 selector에 대해 요소를 테스트 할 때는 절대 위치 요소가 하위 요소가 보이지만 숨겨진 것으로 인식 될 수 있음을 고려해야합니다 .

jQuery 문서를 자세히 살펴보면 관련 정보가 제공되지만 처음에는 다소 직관적 인 것처럼 보입니다.

여러 가지 이유로 요소를 숨길 수 있습니다. [...] 너비와 높이는 명시 적으로 0으로 설정됩니다. [...]

따라서 이것은 실제로 상자 모델과 요소의 계산 스타일과 관련하여 의미가 있습니다. 너비와 높이가 명시 적 으로 0 으로 설정되지 않더라도 암시 적 으로 설정 될 수 있습니다 .

다음 예제를 살펴보십시오.

console.log($('.foo').is(':hidden')); // true
console.log($('.bar').is(':hidden')); // false
.foo {
  position: absolute;
  left: 10px;
  top: 10px;
  background: #ff0000;
}

.bar {
  position: absolute;
  left: 10px;
  top: 10px;
  width: 20px;
  height: 20px;
  background: #0000ff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo">
  <div class="bar"></div>
</div>


jQuery 3.x 업데이트 :

jQuery 3에서는 설명 된 동작이 변경됩니다! 너비 및 / 또는 높이가 0 인 레이아웃 상자를 포함하여 레이아웃 상자가있는 요소는 표시되는 것으로 간주됩니다.

jQuery 3.0.0-alpha1이있는 JSFiddle :

http://jsfiddle.net/pM2q3/7/

동일한 JavaScript 코드는 다음과 같은 출력을 갖습니다.

console.log($('.foo').is(':hidden')); // false
console.log($('.bar').is(':hidden')); // false

90

이것은 작동 할 수 있습니다 :

expect($("#message_div").css("display")).toBe("none");

7
이것은 어떤 언어 / 방언 / 라이브러리입니까? JS에서이 문법에 익숙하지 않습니다 ...
nbrooks

74

예:

$(document).ready(function() {
  if ($("#checkme:hidden").length) {
    console.log('Hidden');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="checkme" class="product" style="display:none">
  <span class="itemlist"><!-- Shows Results for Fish --></span> Category:Fish
  <br>Product: Salmon Atlantic
  <br>Specie: Salmo salar
  <br>Form: Steaks
</div>


66

보이지 않는지 확인하려면 !다음을 사용하십시오 .

if ( !$('#book').is(':visible')) {
    alert('#book is not visible')
}

또는 다음은 sam이므로 jQuery 선택기를 변수에 저장하여 여러 번 필요할 때 성능을 향상시킬 수 있습니다.

var $book = $('#book')

if(!$book.is(':visible')) {
    alert('#book is not visible')
}

1
선택기에 변수를 저장하는 것이 실제로 더 빠르다는 것을 어떻게 결정 했습니까?
Ilia Rostovtsev 2016 년

3
안녕하세요 @Ilia Rostovtsev jsperf.com/caching-jquery-selectors 여기에서 테스트를 실행할 수 있습니다. 어쨌든 그것의 좋은 그것이 빠르게 액세스 할 수 있도록 캐시해야합니다
마티아스 Wegtun을

2
동일한 객체를 호출하고 호출하는 대신 프로세스 전체에서 단일 변수를 사용하려는 경우에 적합합니다.
케네스 팔라가 나스

60

스타일 편집이 아닌 클래스 토글을 사용하십시오. . .

"숨김"요소로 지정된 클래스를 사용하는 것은 쉽고 가장 효율적인 방법 중 하나입니다. Display'없음'스타일로 '숨겨진'클래스를 전환하면 해당 스타일을 직접 편집하는 것보다 빠르게 수행됩니다. Stack Overflow 질문에서 두 가지 요소를 같은 div에 표시 / 숨기려면 이 중 일부를 철저히 설명했습니다 .


자바 스크립트 모범 사례 및 최적화

다음은 Google 프론트 엔드 엔지니어 Nicholas Zakas의 Google Tech Talk 비디오입니다.


60

애드 블로커에 대한 가시적 검사 사용 예가 활성화되었습니다.

$(document).ready(function(){
  if(!$("#ablockercheck").is(":visible"))
    $("#ablockermsg").text("Please disable adblocker.").show();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="ad-placement" id="ablockercheck"></div>
<div id="ablockermsg" style="display: none"></div>

"ablockercheck"는 adblocker가 차단하는 ID입니다. 따라서 눈에 보이는지 확인하면 애드 블로커가 켜져 있는지 감지 할 수 있습니다.


58

결국, 어떤 예도 나에게 적합하지 않으므로 나는 내 자신을 썼습니다.

테스트 (Internet Explorer 지원 안함 filter:alpha) :

a) 문서가 숨겨져 있지 않은지 확인

b) 소자가 제로 너비 / 높이 / 불투명도가 있는지 확인하거나 display:none/ visibility:hidden인라인 스타일

c) 요소의 중심 (또한 모든 픽셀 / 코너를 테스트하는 것보다 빠르기 때문에)이 다른 요소 (및 모든 조상, 예 : overflow:hidden/ 스크롤 / 한 요소를 다른 요소) 또는 화면 가장자리에 숨기지 않았는지 확인하십시오.

d) 요소의 너비 / 높이 / 불투명도 또는 display:none가시성 이 없는지 확인 : 계산 된 스타일로 숨겨 짐 (모든 조상 중에서)

에 테스트

Android 4.4 (기본 브라우저 / Chrome / Firefox), Firefox (Windows / Mac), Chrome (Windows / Mac), Opera (Windows Presto / Mac WebKit), Internet Explorer (Internet Explorer 5-11 문서 모드 + Internet Explorer 8에서 가상 머신) 및 Safari (Windows / Mac / iOS).

var is_visible = (function () {
    var x = window.pageXOffset ? window.pageXOffset + window.innerWidth - 1 : 0,
        y = window.pageYOffset ? window.pageYOffset + window.innerHeight - 1 : 0,
        relative = !!((!x && !y) || !document.elementFromPoint(x, y));
        function inside(child, parent) {
            while(child){
                if (child === parent) return true;
                child = child.parentNode;
            }
        return false;
    };
    return function (elem) {
        if (
            document.hidden ||
            elem.offsetWidth==0 ||
            elem.offsetHeight==0 ||
            elem.style.visibility=='hidden' ||
            elem.style.display=='none' ||
            elem.style.opacity===0
        ) return false;
        var rect = elem.getBoundingClientRect();
        if (relative) {
            if (!inside(document.elementFromPoint(rect.left + elem.offsetWidth/2, rect.top + elem.offsetHeight/2),elem)) return false;
        } else if (
            !inside(document.elementFromPoint(rect.left + elem.offsetWidth/2 + window.pageXOffset, rect.top + elem.offsetHeight/2 + window.pageYOffset), elem) ||
            (
                rect.top + elem.offsetHeight/2 < 0 ||
                rect.left + elem.offsetWidth/2 < 0 ||
                rect.bottom - elem.offsetHeight/2 > (window.innerHeight || document.documentElement.clientHeight) ||
                rect.right - elem.offsetWidth/2 > (window.innerWidth || document.documentElement.clientWidth)
            )
        ) return false;
        if (window.getComputedStyle || elem.currentStyle) {
            var el = elem,
                comp = null;
            while (el) {
                if (el === document) {break;} else if(!el.parentNode) return false;
                comp = window.getComputedStyle ? window.getComputedStyle(el, null) : el.currentStyle;
                if (comp && (comp.visibility=='hidden' || comp.display == 'none' || (typeof comp.opacity !=='undefined' && comp.opacity != 1))) return false;
                el = el.parentNode;
            }
        }
        return true;
    }
})();

사용하는 방법:

is_visible(elem) // boolean

50

둘 다 확인해야합니다 ... 표시 및 가시성 :

if ($(this).css("display") == "none" || $(this).css("visibility") == "hidden") {
    // The element is not visible
} else {
    // The element is visible
}

를 확인 $(this).is(":visible")하면 jQuery는 자동으로 두 가지를 모두 확인합니다.


41

아마도 당신은 이런 식으로 할 수 있습니다

$(document).ready(function() {
   var visible = $('#tElement').is(':visible');

   if(visible) {
      alert("visible");
                    // Code
   }
   else
   {
      alert("hidden");
   }
});
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>

<input type="text" id="tElement" style="display:block;">Firstname</input>


37

다음과 같이 부울 값을 확인하여 가시성을 확인하십시오.

if (this.hidden === false) {
    // Your code
}

각 코드마다이 코드를 사용했습니다. 그렇지 않으면 is(':visible')요소의 가시성을 확인하는 데 사용할 수 있습니다 .


34

때문에 Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout(대한 설명 : 볼 선택기 jQuery를 요소 인 경우, 우리가 확인할 수 있습니다 -) 정말 이런 식으로 볼 수 :

function isElementReallyHidden (el) {
    return $(el).is(":hidden") || $(el).css("visibility") == "hidden" || $(el).css('opacity') == 0;
}

var booElementReallyShowed = !isElementReallyHidden(someEl);
$(someEl).parents().each(function () {
    if (isElementReallyHidden(this)) {
        booElementReallyShowed = false;
    }
});


30

요소가 UI에 표시되는지 여부를 측정하기 위해 가시성 / 디스플레이 속성을 확인하기 위해 함수를 작성할 수 있습니다.

function checkUIElementVisible(element) {
    return ((element.css('display') !== 'none') && (element.css('visibility') !== 'hidden'));
}

일 바이올린


29

또한 요소의 상태를 확인한 다음 전환하는 3 항 조건식이 있습니다.

$('someElement').on('click', function(){ $('elementToToggle').is(':visible') ? $('elementToToggle').hide('slow') : $('elementToToggle').show('slow'); });

4
또는, y'kno, 단지 전체 조건을 없애 말하기를 $('elementToToggle').toggle('slow');...:)
nbrooks

29
if($('#postcode_div').is(':visible')) {
    if($('#postcode_text').val()=='') {
        $('#spanPost').text('\u00a0');
    } else {
        $('#spanPost').text($('#postcode_text').val());
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.