JavaScript ile eleman CSS görüntüsünü kontrol edin


97

Bir elemanın CSS'sini display == blockveya noneJavaScript'i kullanıp kullanmadığını kontrol etmek mümkün müdür ?

Yanıtlar:


115

Sdleihssirhc'nin aşağıda söylediği gibi, eğer öğe displaymiras alınıyorsa veya bir CSS kuralı tarafından belirtiliyorsa, onun hesaplanmış stilini almanız gerekir :

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

Öğeler style, stil satır içi olarak veya JavaScript ile bildirilmişse, size ne istediğinizi söyleyecek bir özelliğe sahiptir:

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

size bir dize değeri verecektir.


2
Ya satır içi css yoksa?
jscripter

5
Basit olması için, neden her zaman hesaplanan stili elde etmiyorsunuz?
cade galt

12
nedir currentStyle? hiç duymadım, ayrıca kontrol etmedim document.body.currentStyleve hiçbir şey
alamadım

1
@vsync (ve ileride başvurmak üzere) MDN'ye göre , bu, Internet Explorer'ın eski sürümünün tescilli bir özelliğidir.
user202729

2
Yorumlarınız için teşekkürler. Modern web için yanıt güncellendi.
Dan Davies Brackett

78

Stil satır içi olarak veya JavaScript ile bildirilmişse, sadece stylenesneye ulaşabilirsiniz :

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

Aksi takdirde, hesaplanan stili almanız gerekir ve tarayıcı tutarsızlıkları vardır. IE basit bir currentStylenesne kullanır , ancak diğer herkes bir yöntem kullanır:

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

nullFirefox sürüm 3 ve aşağıdaki gerekti.


bu == bu durumda olmamalı mı?
Kai Qing

@Kai Üçlü eşit, tür zorlaması yapmaz. Crockford, " ===ve !==Operatörler " adlı bölümde nedenini açıklıyor .
sdleihssirhc

Bu oldukça ilginç. Yıllarca süren programlamadan sonra böyle bir şeyin gözden kaçması ne tuhaf. Ben her zaman ==='nin katı mantıksal olduğu önerisini benimsemiştim. Bunu bildiğim iyi oldu.
Kai Qing

3
@Kai: kullanarak hiçbir sorun yok, ===yerine ==burada, ama aynı derecede hiçbir avantaj ya yoktur. Her iki işlenenin de dize olması garanti edilir, bu nedenle her iki operatör de tam olarak aynı adımları gerçekleştirir.
Tim Down

1
@hippietrail Ve neredeyse 10 yıl sonra (2019-10-27) hala sorunlar var. MDN raporlarını
Felipe Alameda

37

JQuery için böyle mi demek istiyorsun?

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

Bunu şu şekilde kontrol edebilirsiniz:

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

9
Cevabı aşırı karmaşıklaştırmaktan kaçının. JQuery'nin bir şekilde bir standart haline geldiğini biliyorum, ancak yalnızca bir öğenin görüntü stilini kontrol etmek için bütün bir çerçeve eklemenin bir nedeni yok.
zzzzBov

14
Evet ama bunu yaptım çünkü diğer herkes ham javascript cevabını verdi, bu yüzden jquery kullanıyordu ancak belirtmediyse, o zaman yazıda bir miktar kullanım olurdu
Kai Qing

18

Bu cevap tam olarak istediğiniz şey değil, ancak bazı durumlarda faydalı olabilir. Öğenin görüntülendiğinde bazı boyutları olduğunu biliyorsanız, bunu da kullanabilirsiniz:

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

DÜZENLEME: Bu neden CSS displayözelliğinin doğrudan kontrolünden daha iyi olabilir ? Çünkü tüm ana öğeleri kontrol etmenize gerek yoktur. Bazı üst öğe varsa display: none, alt öğeleri de gizlenir, ancak yine de gizlidir element.style.display !== 'none'.


Gerçekten, bu yararlıdır.
Jonatas Walker

7

Evet.

var displayValue = document.getElementById('yourid').style.display;

5

Temel JavaScript:

if (document.getElementById("elementId").style.display == 'block') { 
  alert('this Element is block'); 
}

2

Düz JavaScript ile görünür olup olmadığını öğrenmek için, display özelliğinin "yok" olup olmadığını kontrol edin ("blok" seçeneğini işaretlemeyin, boş veya "satır içi" de olabilir ve hala görünür olabilir):

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

JQuery kullanıyorsanız, bunun yerine bunu kullanabilirsiniz:

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

0

Saf javascript ile style.displayözelliği kontrol edebilirsiniz . JQuery ile kullanabilirsiniz$('#id').css('display')


-1

Örneğin jQuery ile kontrol edebilirsiniz:

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

Bu elemanın display özelliği hakkında bilgi içeren dizge döndürecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.