|
Изменение свойства CSS
Здравствуйте, уважаемые форумчане.
Проблема, вроде бы простая, но у меня её решить не получается. В JavaScript я не особо силён, поэтому не пинайте сильно. Есть 2 div блока. У обоих высота не задана, т.е. зависит от количества контента в них. Причём, у одного из блоков высота динамически меняется при нажатии на ссылку в нём. Требуется сделать так, чтобы высота блоков до раскрытия динамического блока была одинаковой (вот хочется заказчику так, и ничего он слушать не хочет). Я попытался решить проблему следующим образом: Код:
#contentMenuPersonal
<script type="text/javascript">
function change_visibility (block_4_close, block_4_open)
{
document.getElementById(block_4_close).style.display='none';
document.getElementById(block_4_open).style.display='';
}
var size = document.getElementById(contentMenuPersonal).style.height;
var dynamicSize = document.getElementById(bannerBig1).style.height;
if (document.getElementById(block_4_close).style.display='none') {dynamicSize = size;}
</script>
<div id="contentMenuPersonal">
<table cellspacing="10px" align="center">
...текст...
</table>
</div>
<div id="bannerBig1" style="padding: 15px;">
<div id="r0">
...текст...
<a href="javascript:change_visibility ('r0', 'r1')">Читать далее →</a>
</div>
<div id="r1" style="display: none;">
...текст...
<a href="javascript:change_visibility ('r1', 'r0')">← скрыть текст</a>
</div>
</div>
Но ни в одном из браузеров вообще ничего не произошло. |
Squirr,
var dynamicSize = document.getElementById(bannerBig1).style.height; if (document.getElementById(block_4_close).style.disp lay='none') {dynamicSize = size;} красное числовое значение, -а не объект для объекта - так Цитата:
|
Deff, спасибо за помощь. Но ваш вариант работает только в FF.
Изменение конструкции на document.all.contentMenuPersonal.style.height тоже не помогло. |
Цитата:
document.getElementById("contentMenuPersonal")...
идентификаторы в кавычки нужно ставить (contentMenuPersonal, bannerBig1), но не block_4_close, block_4_open 12 строка в первом посте в первом коде не будет работать
if (document.getElementById(block_4_close).style.display='none') {dynamicSize = size;}
block_4_close вне функции...вместо него нужно "r0" или "r1", и в условии нужно ставить не одно равно, а 2
if (document.getElementById("r0").style.display == 'none') {dynamicSize = size;}
|
Цитата:
<style>
#but {height: 50px}
</style>
<button id="but" onclick="alert(this.style.height)">click</button>
<button style="height: 60px" onclick="alert(this.style.height)">click</button>
|
а почему для получение высоты просто не использовать clientWidth, clientHeight ?
|
Цитата:
<style>
button {padding: 2px}
</style>
<button onclick="this.style.height = this.clientHeight">click</button>
|
вот , выдрал из скрипта своего
width_drag = drag.obj.offsetWidth + parseInt(getComputed(drag.obj).marginLeft); width_drag += parseInt(getComputed(drag.obj).marginRight); height_drag = drag.obj.offsetHeight + parseInt(getComputed(drag.obj).marginTop); height_drag += parseInt(getComputed(drag.obj).marginBottom); функция getComputed
function getComputed (obj){
try{
return getComputedStyle(obj, null)
} catch(e){
return obj.currentStyle;
}
};
|
Лично мне больше нравится такой вид
function getStyle(element) {
if (window.getComputedStyle) {
return window.getComputedStyle(element, null)
} else {
return element.currentStyle;
}
}
Если величины будут не в px, то IE<9 не справится, нужно будет усложнять функцию дополнительными действиями по переводу из других единиц измерения + учесть случай, когда выдаётся значение auto. cyber, что нужно будет устанавливать, получив приведённые вами значения width_drag и height_drag? |
<style>
button {padding: 2px}
</style>
<button onclick="
this.style.height = ( this.getBoundingClientRect().bottom - this.getBoundingClientRect().top ) + 'px';
alert( 'Высота элемента: ' + (this.getBoundingClientRect().bottom - this.getBoundingClientRect().top))
">click</button>
|
| Часовой пояс GMT +3, время: 01:34. |
|