그것은 요소의 표시를 전환하는 기능을 사용하는 것이 가능하다 .hide()
, .show()
또는 .toggle()
?
요소가 visible
또는 인지 어떻게 테스트 hidden
합니까?
그것은 요소의 표시를 전환하는 기능을 사용하는 것이 가능하다 .hide()
, .show()
또는 .toggle()
?
요소가 visible
또는 인지 어떻게 테스트 hidden
합니까?
답변:
질문은 단일 요소를 참조하므로이 코드가 더 적합 할 수 있습니다.
// 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를 반환합니다.
visible=false
과 의 혼란을 조장하는 것처럼 보인다 display:none
. 티끌의 솔루션은 명확를 확인 의도 코더를 illistrates 반면 display:none
; (숨기기 및 표시 display:none
하지 않는 컨트롤에 대한 언급을 통해 visible=true
)
:visible
chiborg가 지적한 것처럼 부모 요소가 보이는지 확인합니다.
display
속성 만 검사한다는 것을 분명히 할 것 입니다. 원래의 질문은 show()
and hide()
이고 그들이 설정 한 것으로 가정 display
하면 내 대답은 정확합니다. IE7과 작동하는 방법은 다음과 같습니다 . jsfiddle.net/MWZss 테스트 스 니펫 ;
hidden
선택기 를 사용할 수 있습니다 .
// Matches all elements that are hidden
$('element:hidden')
그리고 visible
선택기 :
// Matches all elements that are visible
$('element:visible')
type="hidden"
는 : hidden을 트리거 할 수있는 경우입니다. 높이와 너비가없는 요소,가있는 요소 display: none
및 숨겨진 조상이있는 요소도 : hidden으로 간주됩니다.
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가 있는지 확인해야 할 때 특히 유용 합니다.
hide()
, show()
그리고 toggle()
대부분은 이미 말했듯이, 우리가 사용해야하지만, 기능 :visible
및 :hidden
의사 클래스를.
이 답변들 중 어느 것도 내가 질문으로 이해 한 것에 대해 언급하지visibility: hidden
않았는데, 내가 찾은 것은 "내가 가진 항목을 어떻게 처리 합니까?" . 어느 쪽 :visible
도 아니다 :hidden
그들은 모두 문서에 따라 디스플레이를 찾고,이 처리되지 않습니다. 내가 결정할 수있는 한 CSS 가시성을 처리 할 수있는 선택기가 없습니다. 다음은 해결 방법입니다 (표준 jQuery 선택기, 더 요약 된 구문이있을 수 있음).
$(".item").each(function() {
if ($(this).css("visibility") == "hidden") {
// handle non visible state
} else {
// handle visible state
}
});
visibility
문자 그대로 처리하는 것이 좋지만 문제는 How you would test if an element has been hidden or shown using jQuery?
입니다. jQuery를 사용한다는 것은 display
속성을 의미 합니다.
visibility: hidden
있거나 표시 opacity: 0
되는 것으로 간주됩니다. 참조 의해 답변 페드로 Rainho 및 jQuery를 문서 상의 :visible
선택합니다.
:visible
및 :hidden
선택기 를 사용하여 요소 축소 여부를 확인할 수 있습니다 .
var isVisible = $('#myDiv').is(':visible');
var isHidden = $('#myDiv').is(':hidden');
가시성에 따라 요소에 단순히 작용하는 경우 선택기 표현식에 포함 :visible
시키거나 포함시킬 수 있습니다 :hidden
. 예를 들면 다음과 같습니다.
$('#myDiv:visible').animate({left: '+=200px'}, 'slow');
top:-1000px
그것을 추측 ... 가장자리의 경우를 것
어떤 것이 눈에 보이는지 아닌지를 확인하는 경우, 즉시 바로 가서 다른 것을 할 것입니다. 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" });
:visible
에 따라 선택 JQuery와 문서 :
- CSS
display
값은none
입니다.- 그것들은을 가진 폼 요소들입니다
type="hidden"
.- 너비와 높이는 명시 적으로 0으로 설정됩니다.
- 조상 요소가 숨겨져 있으므로 요소가 페이지에 표시되지 않습니다.
배치에서 공간을 여전히 소비하므로 요소가
visibility: hidden
있거나 표시opacity: 0
되는 것으로 간주됩니다.
display != none
부모 가시성을 무시하고 요소가 보이는지 ( ) 확인하고 싶을 때 수행하는 .css("display") == 'none'
것이 더 빠를뿐만 아니라 가시성 검사를 올바르게 반환 하기 때문에 어떤 경우에는 유용하고 다른 경우에는 쓸모 가 없습니다.
표시 대신 가시성을 확인하려면 다음을 사용해야합니다 .css("visibility") == "hidden"
..
추가 jQuery 참고 사항도 고려 하십시오 .
:visible
jQuery 확장이며 CSS 스펙의 일부가 아니기 때문에 사용하는 쿼리:visible
는 기본 DOMquerySelectorAll()
메소드가 제공하는 성능 향상을 활용할 수 없습니다 .:visible
요소를 선택할 때 최상의 성능을 얻으려면 먼저 순수한 CSS 선택기를 사용하여 요소를 선택한 다음을 사용하십시오.filter(":visible")
.
또한 성능이 염려되면 지금 확인 하십시오 . 성능 표시 / 숨기기 (2010-05-04)를 확인하십시오. 그리고 다른 방법을 사용하여 요소를 표시하거나 숨 깁니다.
어떻게 요소의 가시성 및 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();
});
visibility:hidden
와 (과 opacity:0
)의 또 다른 차이점 은 요소가 여전히 클릭 수와 같은 이벤트에 응답한다는 것입니다 opacity:0
. 파일 업로드를 위해 사용자 지정 버튼을 만드는 트릭을 배웠습니다.
일반 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;
}
노트:
어디서나 작동
중첩 요소에 적용
CSS 및 인라인 스타일에서 작동
프레임 워크가 필요하지 않습니다
visibility: hidden
됩니다 .
CSS 클래스를 사용 .hide { display: none!important; }
합니다.
숨기거나 보여주기 위해을 호출 .addClass("hide")/.removeClass("hide")
합니다. 가시성을 확인하기 위해을 사용 .hasClass("hide")
합니다.
사용하지 .toggle()
않거나 .animate()
방법을 계획하지 않은 경우 요소를 확인 / 숨기기 / 표시하는 간단하고 명확한 방법입니다.
.hasClass('hide')
부모의 조상이 숨겨져 있는지 확인하지 않습니다 (숨겨 지기도 함). 를 확인하여 올바르게 작동하도록 할 수는 .closest('.hide').length > 0
있지만 휠을 재발 명하는 이유는 무엇입니까?
$('#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를 사용하여 요소가 숨겨져 있는지 또는 표시되는지 확인하는 방법
:hidden
jQuery 에서 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 :
동일한 JavaScript 코드는 다음과 같은 출력을 갖습니다.
console.log($('.foo').is(':hidden')); // false
console.log($('.bar').is(':hidden')); // false
예:
$(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>
보이지 않는지 확인하려면 !
다음을 사용하십시오 .
if ( !$('#book').is(':visible')) {
alert('#book is not visible')
}
또는 다음은 sam이므로 jQuery 선택기를 변수에 저장하여 여러 번 필요할 때 성능을 향상시킬 수 있습니다.
var $book = $('#book')
if(!$book.is(':visible')) {
alert('#book is not visible')
}
"숨김"요소로 지정된 클래스를 사용하는 것은 쉽고 가장 효율적인 방법 중 하나입니다. Display
'없음'스타일로 '숨겨진'클래스를 전환하면 해당 스타일을 직접 편집하는 것보다 빠르게 수행됩니다. Stack Overflow 질문에서 두 가지 요소를 같은 div에 표시 / 숨기려면 이 중 일부를 철저히 설명했습니다 .
다음은 Google 프론트 엔드 엔지니어 Nicholas Zakas의 Google Tech Talk 비디오입니다.
애드 블로커에 대한 가시적 검사 사용 예가 활성화되었습니다.
$(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입니다. 따라서 눈에 보이는지 확인하면 애드 블로커가 켜져 있는지 감지 할 수 있습니다.
결국, 어떤 예도 나에게 적합하지 않으므로 나는 내 자신을 썼습니다.
테스트 (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
둘 다 확인해야합니다 ... 표시 및 가시성 :
if ($(this).css("display") == "none" || $(this).css("visibility") == "hidden") {
// The element is not visible
} else {
// The element is visible
}
를 확인 $(this).is(":visible")
하면 jQuery는 자동으로 두 가지를 모두 확인합니다.
아마도 당신은 이런 식으로 할 수 있습니다
$(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>
때문에 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;
}
});
그러나 요소의 CSS가 다음과 같은 경우 어떻게해야합니까?
.element{
position: absolute;left:-9999;
}
따라서 스택 오버플로 질문에 대한 대답 은 요소가 화면 밖인지 확인하는 방법 도 고려해야합니다.
$(element).is(":visible")
,하지만 jQuery를 1.3.2를 들어, 아래 jQuery를 1.4.4에 대한 작품 인터넷 & NBSP; NBSP 탐색기 및 8 . 이것은 Tsvetomir Tsonev의 유용한 테스트 스 니펫을 사용하여 테스트 할 수 있습니다 . jQuery 버전을 변경하여 각 버전에서 테스트하십시오.