اگر بخوایم با Vanilla JS (جاوااسکریپت خام) این بررسی رو انجام بدیم، طبق داکیومنتیشن ، ویژگی offsetParent
یک المنت، نال NULL
میشه اگه اون لمنت توسط ویژگی display
(در سی اس اس CSS) غیر قابل نمایش (یا همون hidden
) باشه.
نکته 1: حتی اگه والدین یک المنت باز دیسپلیشون display
غیر قابل نمایش hidden
باشه بازم NULL
میشه offsetParent
.
نکته 2: فقط باید دقت کنی که المنت فیکس نباشه. یعنی اگه ویژگی position: fixed;
رو نداشته باشه، می تونی از کد پایین استفاده کنی:
// Select the element
var el = document.getElementById("yourElementId");
// Check visibility
if (isHidden(el)){
console.log('The element is not visible in the page');
} else {
console.log('The element is visible in the page');
}
/* Check function
* @params js-element
* @return boolean
*/
function isHidden(el) {
return (el.offsetParent === null)
}
نکته 3: اما اگر ویژگی position: fixed;
برای المنت مورد نظر ست شده، متاسفانه دیگه روش بالا جوابگو نیست و باید از window.getComputedStyle()
استفاده کنی. یعنی تابع نهاییت باید یک همچین چیزی باشه:
/* Check function
* @params js-element
* @return boolean
*/
function isHidden(el) {
var style = window.getComputedStyle(el);
return (style.display === 'none')
}
می دونم به سوالت برچسب jQuery
رو زده بودی و احتمالا همون .is(":visible")
ی که دوستمون آقای S Kill گفتن کارت رو راه می ندازه. ولی این جواب رو نوشتم برای کسایی که کلا جی کوئری رو ضمیمه پروژشون نکردن.
نکته 4: بد نیست که این نکته پایانی رو هم بگم که روش دوم یک مقداری کُنده. پس اگه لازم دارید توی یک لوپ (حلقه) یا چندین بار پشت سر هم این تابع رو صدا بزنید، ترجیحا ازش استفاده نکنید.