2010-09-23 4 views
11
<html> 
    <style type="text/css"> 
     a { 
      display: none; 
     } 
    </style> 
    <body> 
     <p id="p"> a paragraph </p> 
     <a href="http://www.google.com" id="a">google</a> 
    </body> 
    <script type="text/javascript"> 
     var a = (document.getElementById('a')).style; 
     alert(a.display); 
     var p = (document.getElementById('p')).style; 
     alert(p.display); 
     p.display = 'none'; 
     alert(p.display); 
    </script> 
</html> 

Первый и второй alert дисплей ничего кроме пустой строки, которые я думал, должно быть none и block. Однако после настройки display третий alert наконец оповещает none.Как получить свойство отображения элемента DOM?

Но почему? Как я могу правильно получить свойство display?

Спасибо.

ответ

21

Недвижимость .style.* Недвижимость на карте style, а не на прикладной стиль. Для этого вы хотите getComputedStyle.

Я бы серьезно подумал о переключении .className и полном отделении презентации от логики.

+0

стиль не следует называть атрибутом. Это объект. Каждый элемент узла DOM имеет свойство стиля. Это свойство является объектом. ... Атрибут стиля HTML используется для добавления свойств в свойство стиля узла DOM, представляющего элемент HTML. После анализа кода HTML у нас больше нет атрибутов HTML, а свойств объекта. –

+2

@ Šime Vidas: Я думаю, что если вы перечитаете ответ Дэвида, вы поймете, что он правильно нарисовал это различие. –

+0

@David Dorward: Спасибо за помощь. Итак, каково использование атрибута 'style', поскольку оно не могло отражать изменение стиля CSS в режиме реального времени? – Jichao

6

Вам нужно вычисленное значение свойства отображения для элемента. Вы можете получить это следующим образом. Обратите внимание, что большинство браузеров поддерживают window.getComputedStyle() в то время как ближайший эквивалент в ИЭ элемент currentStyle свойства:

var el = document.getElementById('a'); 
var styleObj; 

if (typeof window.getComputedStyle != "undefined") { 
    styleObj = window.getComputedStyle(el, null); 
} else if (el.currentStyle != "undefined") { 
    styleObj = el.currentStyle; 
} 

if (styleObj) { 
    alert(styleObj.display); 
} 
0

Если вы можете использовать JQuery, есть метод, называемый .is

Чтобы проверить, не отображается что-то, Я бы сделал ... $('someSelector').is(':visible') ...

Это вернет false, если для атрибута отображения установлено значение Нет.

2

Я бы рекомендовал использовать библиотеку JavaScript для получения вычисленного стиля. Например, с помощью JQuery вы можете получить вычисляемый стиль с помощью метода CSS() ...

$("#a").css("display"); 

Метод CSS() является решением кросс-браузер, как он внутренне использует объект стиля и как метод getComputedStyle и объект currentStyle.

Смежные вопросы