Javascript clientВысота несоответствия - PullRequest
1 голос
/ 11 марта 2009

При написании Javascript функции, от которой я получил помощь от ранее , которая получает высоту скрытого элемента, кто-то дал мне ссылку на функцию Prototype getDimensions (), В этом примере они устанавливают «visibility: hidden; position: absolute; display: block;», что фактически позволяет нам измерить то, что clientHeight будет , если бы оно отображалось. Затем они все это откладывают, и вы можете заняться своими делами. Я не использовал прототип, но я бы предположил, что он работает нормально. Тем не менее, когда я пытался имитировать ту же функцию в своем собственном коде, использование «position: absolute;» скинул измерение. Без него он работает нормально, но его использование позволяет нам делать это за доли секунды, не искажая дизайн. Моя версия ниже, есть идеи, почему она не работает?

    var objStyle = obj[objName].style;

    // Record original style values
    var visibility = objStyle.visibility;
    //var position = objStyle.position;
    var display = objStyle.display;

    // Modify object for measuring
    objStyle.visibility = "hidden";
    //objStyle.position = "absolute";
    objStyle.display = "block";

    // Measure height
    height = obj[objName].clientHeight;

    // Fix object
    objStyle.visibility = visibility;
    //objStyle.position = position;
    objStyle.display = display;

    // Return height
    return parseInt(height);

Заранее спасибо за помощь.

Ответы [ 3 ]

0 голосов
/ 11 марта 2009

Вы видите это только в браузере Cetain или во всех браузерах? ProDtype getDimensions () выполняет проверку Safari (и, возможно, других браузеров с ошибками), вы должны попытаться включить это в свой код и посмотреть, решит ли это проблему.

Это также может быть связано с тем, что вы используете obj [objName], а не document.getElementById () - AFAIK они будут возвращать немного другие объекты, что может вызвать несоответствие, которое вы видите.

0 голосов
/ 29 октября 2009

Я обычно измеряю свои высоты с помощью .offsetHeight, что-то вроде:

var h = document.getElementById (divname) .offsetHeight;

Когда мне нужно что-то измерить, если оно имеет положение: абсолютное;

Я обычно сталкиваюсь с этим, когда у меня есть два столбца и один является абсолютным, и родительский элемент должен быть вытеснен одним абсолютным, если он больше другого. Я буду использовать offsetHeight, чтобы установить родительскую высоту, если она больше, чем высота другого столбца.

0 голосов
/ 11 марта 2009

Я не знаю, работает ли он, пока он невидим, но у jQuery есть несколько опций - в частности, функция height ; стоит посмотреть? Исходя из вашего примера, что-то вроде:

height = $(obj[objName]).height();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...