그것은 요소의 표시를 전환하는 기능을 사용하는 것이 가능하다 .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)
:visiblechiborg가 지적한 것처럼 부모 요소가 보이는지 확인합니다.
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 참고 사항도 고려 하십시오 .
:visiblejQuery 확장이며 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를 사용하여 요소가 숨겨져 있는지 또는 표시되는지 확인하는 방법
: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 :
동일한 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 버전을 변경하여 각 버전에서 테스트하십시오.