요소의 CSS display == block또는 noneJavaScript 사용 여부를 확인할 수 있습니까?
답변:
sdleihssirhc가 아래에 말했듯이 요소 display가 상속되거나 CSS 규칙에 의해 지정되는 경우 계산 된 스타일을 가져와야 합니다 .
return window.getComputedStyle(element, null).display;
요소에는 style스타일이 인라인으로 선언되었거나 JavaScript로 선언 된 경우 원하는 것을 알려주 는 속성이 있습니다.
console.log(document.getElementById('someIDThatExists').style.display);
문자열 값을 제공합니다.
currentStyle입니까? 들어 본 적도없고, 확인한 결과 document.body.currentStyle아무것도 얻지 못했습니다 (놀라지 않았습니다)
스타일이 인라인 또는 JavaScript로 선언 된 경우 style개체 에서 얻을 수 있습니다 .
return element.style.display === 'block';
그렇지 않으면 계산 된 스타일을 가져와야하며 브라우저 불일치가 있습니다. IE는 간단한 currentStyle개체를 사용하지만 다른 모든 사람은 다음과 같은 방법을 사용합니다.
return element.currentStyle ? element.currentStyle.display :
getComputedStyle(element, null).display;
는 null파이어 폭스 버전 3 이하에 필요했습니다.
===보다 사용 하는 데 문제가 ==없지만 똑같이 이점도 없습니다. 두 피연산자 모두 문자열이 보장되므로 두 연산자 모두 정확히 동일한 단계를 수행합니다.
jQuery의 경우 이와 같은 의미입니까?
$('#object').css('display');
다음과 같이 확인할 수 있습니다.
if($('#object').css('display') === 'block')
{
//do something
}
else
{
//something else
}
이 대답은 정확히 원하는 것은 아니지만 경우에 따라 유용 할 수 있습니다. 요소가 표시 될 때 일부 치수가 있음을 알고있는 경우 다음을 사용할 수도 있습니다.
var hasDisplayNone = (element.offsetHeight === 0 && element.offsetWidth === 0);
편집 : 이것이 CSS display속성을 직접 확인하는 것보다 나은 이유는 무엇 입니까? 모든 부모 요소를 확인할 필요가 없기 때문입니다. 일부 부모 요소에가 있으면 display: none자식도 숨겨 지지만 여전히 있습니다 element.style.display !== 'none'.