ตรวจสอบองค์ประกอบ CSS ที่แสดงด้วย JavaScript


97

เป็นไปได้ไหมที่จะตรวจสอบว่า CSS ขององค์ประกอบdisplay == blockหรือnoneใช้ JavaScript

คำตอบ:


115

ดังที่ sdleihssirhc กล่าวไว้ด้านล่างหากองค์ประกอบdisplayกำลังได้รับการสืบทอดหรือถูกระบุโดยกฎ CSS คุณจะต้องได้รับรูปแบบการคำนวณ :

return window.getComputedStyle(element, null).display;

องค์ประกอบมีstyleคุณสมบัติที่จะบอกคุณว่าคุณต้องการอะไรหากมีการประกาศสไตล์แบบอินไลน์หรือด้วย JavaScript:

console.log(document.getElementById('someIDThatExists').style.display);

จะให้ค่าสตริงแก่คุณ


2
จะเกิดอะไรขึ้นถ้ามันไม่มี inline css?
jscripter

5
เพื่อความเรียบง่ายทำไมไม่ลองใช้รูปแบบการคำนวณเสมอไป
cade galt

12
คือcurrentStyleอะไร? ไม่เคยได้ยินมาก่อนตรวจสอบdocument.body.currentStyleแล้วก็ไม่มีอะไร (ไม่แปลกใจ)
vsync

1
@vsync (และสำหรับการอ้างอิงในอนาคต) ตามที่ MDNเป็นทรัพย์สินที่เป็นกรรมสิทธิ์ของ Internet Explorer เวอร์ชันเก่า
user202729

2
ขอบคุณสำหรับความคิดเห็น คำตอบปรับปรุงสำหรับเว็บที่ทันสมัย
Dan Davies Brackett

78

หากมีการประกาศสไตล์แบบอินไลน์หรือด้วย JavaScript คุณสามารถเข้าไปที่styleวัตถุ:

return element.style.display === 'block';

มิฉะนั้นคุณจะต้องได้รับรูปแบบที่คำนวณและเบราว์เซอร์ไม่สอดคล้องกัน IE ใช้currentStyleออบเจ็กต์ธรรมดาแต่ทุกคนใช้วิธีการ:

return element.currentStyle ? element.currentStyle.display :
                              getComputedStyle(element, null).display;

nullที่ถูกต้องในรุ่น Firefox 3 และด้านล่าง


ไม่ควรเป็น == ในกรณีนี้?
Kai Qing

@ ไค The Triple เท่ากับไม่ได้บังคับประเภท Crockford อธิบายว่าเหตุใดในส่วนที่เรียกว่า " ===and !==Operators"
sdleihssirhc

น่าสนใจทีเดียว ตลกดีที่บางสิ่งเช่นนี้สามารถหลบหนีการแจ้งเตือนได้หลังจากการเขียนโปรแกรมหลายปี ฉันใช้คำแนะนำเสมอว่า === เป็นบูลีนที่เข้มงวด ดีแล้วที่รู้.
Kai Qing

3
@ ไค: ไม่มีปัญหากับการใช้งาน===มากกว่า==ที่นี่ แต่ก็ไม่มีข้อได้เปรียบเช่นกัน ตัวถูกดำเนินการทั้งสองได้รับการรับรองว่าเป็นสตริงดังนั้นตัวดำเนินการทั้งสองจึงดำเนินการในขั้นตอนเดียวกันทุกประการ
Tim Down

1
@hippietrail และเกือบ 10 ปีต่อมา (2019-10-27) ยังคงมีปัญหา ตรวจสอบรายงานของ MDN
Felipe Alameda A

37

สำหรับ jQuery คุณหมายถึงแบบนี้หรือเปล่า?

$('#object').css('display');

คุณสามารถตรวจสอบได้ดังนี้:

if($('#object').css('display') === 'block')
{
    //do something
}
else
{
    //something else
}

9
หลีกเลี่ยงการทำให้คำตอบซับซ้อนเกินไป ฉันรู้ว่า jQuery กำลังกลายเป็นมาตรฐาน แต่ไม่มีเหตุผลที่จะเพิ่มกรอบงานทั้งหมดเพียงเพื่อตรวจสอบรูปแบบการแสดงผลขององค์ประกอบ
zzzzBov

14
ใช่ แต่ฉันทำสิ่งนี้เพราะคนอื่นให้คำตอบ javascript ดิบดังนั้นหากเขาใช้ jquery แต่ไม่ได้ระบุจะมีการใช้งานบางอย่างในโพสต์
Kai Qing

18

คำตอบนี้ไม่ตรงกับที่คุณต้องการ แต่อาจมีประโยชน์ในบางกรณี หากคุณทราบว่าองค์ประกอบมีมิติข้อมูลบางส่วนเมื่อแสดงคุณยังสามารถใช้สิ่งนี้

var hasDisplayNone = (element.offsetHeight === 0 && element.offsetWidth === 0);

แก้ไข: เหตุใดจึงอาจดีกว่าการตรวจสอบdisplayคุณสมบัติCSS โดยตรง เนื่องจากคุณไม่จำเป็นต้องตรวจสอบองค์ประกอบหลักทั้งหมด หากบางส่วนองค์ประกอบหลักมีdisplay: noneเด็กมันจะถูกซ่อนไว้มากเกินไป element.style.display !== 'none'แต่ก็ยังมี


อันที่จริงสิ่งนี้มีประโยชน์
Jonatas Walker



2

หากต้องการทราบว่าสามารถมองเห็นได้ด้วย JavaScript ธรรมดาหรือไม่ให้ตรวจสอบว่าคุณสมบัติการแสดงผลเป็น 'ไม่มี' หรือไม่ (อย่าตรวจสอบคำว่า 'block' อาจว่างเปล่าหรือ 'inline' และยังมองเห็นได้):

var isVisible = (elt.style.display != "none");

หากคุณใช้ jQuery คุณสามารถใช้สิ่งนี้แทนได้:

var isVisible = $elt.is(":visible");

0

ด้วยจาวาสคริปต์ที่บริสุทธิ์คุณสามารถตรวจสอบstyle.displayคุณสมบัติ ด้วย jQuery คุณสามารถใช้$('#id').css('display')


-1

คุณสามารถตรวจสอบได้ด้วยตัวอย่างเช่น jQuery:

$("#elementID").css('display');

มันจะส่งคืนสตริงพร้อมข้อมูลเกี่ยวกับคุณสมบัติการแสดงผลขององค์ประกอบนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.