Следующий код jQuery отлично работает с Safari, Opera, FF2 и FF3. Он помещает загруженный DIV (с оживленным загруженным GIF-файлом) поверх элемента FORM на моей веб-странице. Проблема в том, что в IE6 и IE7 он получает ширину и высоту должным образом, но не кажется, что он правильно перемещается вверх и вниз. В чем подвох?
var nH = $('#' + sForm).attr('offsetHeight');
var nW = $('#' + sForm).attr('offsetWidth');
var nT = $('#' + sForm).attr('offsetTop');
var nL = $('#' + sForm).attr('offsetLeft');
$('#busy')
.css('position','absolute')
.css('height', nH + 'px')
.css('width', nW + 'px')
.css('top', nT + 'px')
.css('left', nL + 'px')
.show();
Обратите внимание, что на моей странице есть несколько элементов FORM. (Причина загруженного GIF в том, что я делаю сообщение AJAX в фоновом режиме при отправке формы.)
Обратите внимание: я также пробовал значение .position() плагина 1.2 jQuery Dimensions для верхнего и левого угла, и это помогло, но, похоже, значение top становилось все меньше, чем дальше я двигался вниз по странице.

Я заставил его работать со значением .position () плагина jQuery Dimensions 1.2 для верхнего и левого угла. (Он возвращает массив, в котором вы можете получить значения верхнего и левого массивов.) Исправление заключалось в том, что мне пришлось перехватить IE6 и просто вычесть некоторое фиксированное число (12 пикселей в моем случае) для вершины и добавить это же число по высоте. В IE7 я мог сделать то же самое, но по какой-то причине мне пришлось по-разному вычислять верх и высоту для первых 200 пикселей или меньше. Ваша ситуация может быть другой, в зависимости от вашего предыдущего CSS, вашего reset.css и так далее.
Вы уверены, что элемент настроен на отображение: блок? Также вы можете избежать множественных вызовов функции css, передав такой хэш:
$('#busy')
.css({'position':'absolute',
'height': nH + 'px',
'width', nW + 'px',
'top', nT + 'px',
'left', nL + 'px'})
.show();
Прямо сейчас jQuery (последняя общедоступная версия) включает измерения в качестве основных функций.
Попробуйте использовать $ (element) .offset () (он возвращает объект со свойствами "left" и "top"). Я много использовал его, и он идеально подходит для многих браузеров (ie6 / 7, opera, safari, chrome, ff2 / 3).
Спасибо за чаевые. Похоже, я могу перестать использовать плагин jQuery Dimensions. Я попробую посмотреть, поможет ли мне смещение. Может быть еще одна вещь, чтобы ускорить веб-страницу и порадовать YSlow.
Спасибо за совет. Я не думал о производительности, а должен был думать. Ты прав.