Могу ли я определить текущее состояние стиля отображения CSS для данного элемента, используя JS - PullRequest
2 голосов
/ 02 марта 2010

Я хочу написать простую функцию javascript, которая переключает видимость данного элемента. Проблема в том, что сразу после загрузки страницы начальный стиль неизвестен (по крайней мере, мне). Как определить текущее значение элемента стиля отображения данного элемента?

Ответы [ 7 ]

7 голосов
/ 02 марта 2010

Из исходного кода jQuery / Sizzle:

elem.offsetWidth > 0 || elem.offsetHeight > 0 // visible
elem.offsetWidth === 0 || elem.offsetHeight === 0  // hidden

где elem - элемент DOM.

Теперь я не совсем уверен, почему они говорят, что элемент видим , если или измерение больше нуля. Я бы сказал, что оба измерения должны быть больше нуля, чтобы оно считалось «видимым», но я верю, что они знают лучше. (Возможно, одно нулевое измерение и другое ненулевое измерение даже невозможно в браузере).

Обновление: Есть еще одно обсуждение по теме и альтернативное решение (хотя еще не пробовали): Как проверить, действительно ли элемент виден в JavaScript?

2 голосов
/ 02 марта 2010

Чисто Javascript, это должно работать.

function getStyle(elementId){
   alert(document.defaultView.getComputedStyle(document.getElementById(elementId), '').getPropertyValue("display"));
}
1 голос
/ 02 марта 2010
function getDisplayStyle(elementId){   
 var display = document.getElementById(elementId).style.display;
 alert(display);
}
0 голосов
/ 02 марта 2010

Измерение смещений будет работать, если вы смотрите только на свойство отображения, но тест для visibility требует изучения каскада стилей (зависящего от браузера)

document.deepCss=function(who, css){
 var val, dv= document.defaultView || window;
 val= who.style[css];
 if(!val){
  if(who.currentStyle) val= who.currentStyle[css];
  else val= dv.getComputedStyle(who,"").getPropertyValue(css);
 }
 return val || "";
}
function isVisible(who){
 return !!(document.deepCss(who,'visibility') != 'hidden' && 
 document.deepCss(who,'display') != 'none');
}
0 голосов
/ 02 марта 2010

Нет-нет, jquery не нужен.

ЕСЛИ это показ: ни один вы не после. Еще сделать то же самое с видимостью: скрыто.

 if(mynode.style.display != "none")
    { ..  }
    else
0 голосов
/ 02 марта 2010
$(document).ready( function () {
 if $('#id').hasClass('hidden') 
   $('#id').toggelClass('hidden');
);

скрыто класс CSS для скрытия элемента

0 голосов
/ 02 марта 2010

с использованием jQuery, при условии, что ваш элемент имеет идентификатор myElement:

if($("#myElement").is(":visible")){
    // yep, it's visible - handle accordingly
}else{
    // nope, not visible
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...