Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.02.2011, 11:05
Интересующийся
Отправить личное сообщение для Sonkkorh Посмотреть профиль Найти все сообщения от Sonkkorh
 
Регистрация: 08.02.2011
Сообщений: 15

наследный display
свойство display, как известно, наследуется от родительского элемента. Но если display у элемента не указан, то style.display вернёт значение по умолчанию, хотя у родительского элемента display может отличатся.
Как узнать реальный display

Например

<div style="display:none">
<span id="spanid">блабла<span>
</div>
<script>
alert(document.getElementById('spanid').style.display);
</script>


В результате получим не none, что было бы логично, а ''.

Последний раз редактировалось Sonkkorh, 16.02.2011 в 11:08.
Ответить с цитированием
  #2 (permalink)  
Старый 16.02.2011, 11:24
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

Как раз таки логично именно ''.
Тут: document.getElementById('spanid').style только то, что указанно <span id="spanid" style="тут"><span>.(ну и то, что указанно собсно через style)

Последний раз редактировалось Aetae, 16.02.2011 в 11:30.
Ответить с цитированием
  #3 (permalink)  
Старый 16.02.2011, 11:26
Интересующийся
Отправить личное сообщение для Sonkkorh Посмотреть профиль Найти все сообщения от Sonkkorh
 
Регистрация: 08.02.2011
Сообщений: 15

и? Ты просто скопировал мой пример. Результат-то от этого не поменялся.
Ответить с цитированием
  #4 (permalink)  
Старый 16.02.2011, 11:28
Интересующийся
Отправить личное сообщение для Sonkkorh Посмотреть профиль Найти все сообщения от Sonkkorh
 
Регистрация: 08.02.2011
Сообщений: 15

вопрос как раз в том, чтоб определить результирующий display, тот который браузер отобразит.
Ответить с цитированием
  #5 (permalink)  
Старый 16.02.2011, 11:29
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

Если не ошибаюсь то свойство display не наследует значение у родителя.

Можно узнать вот так:
<html>
<head>
</head>
<body>
<div style="display:none">
<span id="spanid">блабла<span>
</div>
<script>
function GetCssStyle(e){
    if (e.currentStyle) return e.currentStyle;
    else if (window.getComputedStyle) return window.getComputedStyle(e,null);
}
alert(GetCssStyle(document.getElementById('spanid') ).display);
</script>
</body>
</html>


Но так вернет default значение - "inline", так как я уже говорил, что если я не ошибаюсь, то display не наследует значение у родителя.
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #6 (permalink)  
Старый 16.02.2011, 11:38
Интересующийся
Отправить личное сообщение для Sonkkorh Посмотреть профиль Найти все сообщения от Sonkkorh
 
Регистрация: 08.02.2011
Сообщений: 15

в том-то и дело что наследует
если открыть пример в браузере, то "блабла" не видно. Аналайзер хрома и фф показывают, что display наследуется от родителя.
Ответить с цитированием
  #7 (permalink)  
Старый 16.02.2011, 11:41
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

а вам не подойдет свойство visibility ?

<html>
<head>
</head>
<body>
<div style="visibility: hidden">
<span id="spanid">блабла<span>
</div>
<script>
function GetCssStyle(e){
    if (e.currentStyle) return e.currentStyle;
    else if (window.getComputedStyle) return window.getComputedStyle(e,null);
}
alert(GetCssStyle(document.getElementById('spanid') ).visibility);
</script>
</body>
</html>


Только нужно учесть что visibility будет занимать место на страничке, поэтому и спрашиваю что если не подойдет
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай

Последний раз редактировалось walik, 16.02.2011 в 11:45.
Ответить с цитированием
  #8 (permalink)  
Старый 16.02.2011, 11:45
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от Sonkkorh
если открыть пример в браузере, то "блабла" не видно
Это не потому что свойство display наследуется... В противном случае все что в диве имело бы

display: block;


А он таки у всех свой...
Ответить с цитированием
  #9 (permalink)  
Старый 16.02.2011, 11:53
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от Sonkkorh
вопрос как раз в том, чтоб определить результирующий display, тот который браузер отобразит.
Как вариант ответа
Цитата:
Я хочу получить значение CSS свойства, но возвращается пустая строка. Например, хочу узнать цвет текста элемента и пишу
document.getElementById("elemId").style.color
, а результат пустая строка. Что делать?


Объект style элемента (document.getElementById("elementId").style), содержит только те значения, которые были заданны явно в атрибуте style в тэге элемента или были предварительно назначены через скрипт. Если Вы задаёте CSS свойства через тэг <STYLE></STYLE> или внешние листы стилей, то они не будут присутствовать в объекте style элемента.

Возникает вопрос, как узнать вычисленное значение свойства элемента, если оно не задано в атрибуте style элемента и не было инициализировано через скрипт?

Воспользуйтесь функцией (работает начиная с NN 6, IE 5, Opera 7):

function getElementComputedStyle(elem, prop)
{
  if (typeof elem!="object") elem = document.getElementById(elem);
  
  // external stylesheet for Mozilla, Opera 7+ and Safari 1.3+
  if (document.defaultView && document.defaultView.getComputedStyle)
  {
    if (prop.match(/[A-Z]/)) prop = prop.replace(/([A-Z])/g, "-$1").toLowerCase();
    return document.defaultView.getComputedStyle(elem, "").getPropertyValue(prop);
  }
  
  // external stylesheet for Explorer and Opera 9
  if (elem.currentStyle)
  {
    var i;
    while ((i=prop.indexOf("-"))!=-1) prop = prop.substr(0, i) + prop.substr(i+1,1).toUpperCase() + prop.substr(i+2);
    return elem.currentStyle[prop];
  }
  
  return "";
}
Взято тут
http://www.tigir.com/javascript.htm
Ответить с цитированием
  #10 (permalink)  
Старый 16.02.2011, 11:53
Интересующийся
Отправить личное сообщение для Sonkkorh Посмотреть профиль Найти все сообщения от Sonkkorh
 
Регистрация: 08.02.2011
Сообщений: 15

он наследуется, если не указан явно. в данном случае у span он явно не указан.

visibility не подойдёт, т.к. пишу скрипт для GM. Приходится работать с уже свёрстанной страничкой.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменение значения элемента display (Sandr) Общие вопросы Javascript 15 08.02.2017 10:28
коррекция кода harek13 jQuery 1 16.12.2010 17:13
Что лучше, display или visibility? FirstFrost Общие вопросы Javascript 1 21.07.2010 05:42
CSS-свойсво display в Netscape Сергей Д Элементы интерфейса 10 23.06.2010 20:18
Использование css свойства display для подменю Lex4e Общие вопросы Javascript 7 07.01.2010 22:02