2014-11-06 4 views
0

Как и в JQuery 1.8, изменение было сделано при получении высоты() элемента. У меня есть высота div CSS, установленная на auto с изображением внутри, определяющим высоту и ширину div, используя% и auto), и когда окно загружается, я использую JQuery для получения высоты элемента и создания другого div рядом с ним такая же высота. Изучив это, я заметил, что он возвращает высоту, прежде чем CSS установит новую высоту, заданную изображением. 1.7 разрешили это, но 1,8 и выше нет. Это работа. это CSSjquery 1.8 и выше, установите высоту div таким же, как и другой div

#element1{ width:80%; height:auto;} 
#element1 img{width:100%; height:auto};//this allows the image to resize with the page responsively. 

JQuery ...

$(window).ready(
function(){ 
var x = $("#element").height(); 
alert(x); // this would return what the height was dynamically set as by the css in 1.7, but 1.8 returns a small number that i am pretty certain is just the padding added to 0px 
}); 

Надеется, что это имеет смысл, а кто-то есть работа вокруг. Thanks

+0

Если вы создали скрипку, я могу вам помочь, но попробуйте '.outerHeight()'? – elzi

+0

'.outerHeight()' является хорошим предложением; это включает в себя высоту + границу + margin + padding –

ответ

1

Вместо того чтобы слушать на $(window).load(), что может затормозить правильное задание по высоте до тех пор, пока были успешно загружены все ресурсов, вы можете слушать успешную загрузку на каждый <img> экземпляра и вызвать надлежащее вычисление высоты.

Однако, поскольку в вашем вопросе у вас есть только один элемент, который вас интересует динамической настройкой высоты, я сократил свой сценарий без необходимости прокручивать все экземпляры <img> на странице. Если предположить, что у вас есть следующий код:

<div id="element1"> 
    <img ... /> 
</div> 

Вы можете создать новое изображение, проверьте, если он будет загружен, а затем проинструктировать JQuery для запуска вычисления высоты и установить новую высоту, когда это делается:

$(function() { 
    var $img = $('<img />', { 
     'src': $('#element1 img').attr('src') 
    }); 

    $img.load(function() { 
     $('#element2').css('height', $('#element1').height()); 
    }); 
}); 
+0

Это сработало красиво! – rgraphix

0

Существует несовпадение между вашим селектором css (# element1) и селектором jquery ('#element'). Начните с того, что они оба соответствуют тому, что у вас есть на вашем элементе html. Вы можете также обернуть это в таймаут, чтобы у вашего изображения было время для полной загрузки.

$(document).ready(function() { 
    setTimeout(function() { 
     $('#element2').height($('#element1').height()); 
    }, 2000}); 
}); 
+0

Кроме того, вы МОЖЕТЕ обернуться внутри '$ (window) .load (function() {...});' вместо '$ (document) .ready (function() {...}); '. Window.load будет ждать загрузки изображений перед запуском. –

+0

@SetSailMedia Использование '$ (window) .load()' может быть довольно грубым решением, так как оно будет ждать, пока все ресурсы будут успешно загружены, прежде чем вызывать анонимную функцию внутри. Хотя это будет иметь менее заметный эффект на малых/облегченных страницах, страницы с тяжелыми ресурсами изображения могут срывать правильные расчеты высоты. – Terry

+0

Set Sail Media, что фактически решает проблему. После JQuery 1.7 что-то изменилось, что заставило JQuery не дождаться загрузки изображения. Это может быть немного медленнее, но на данный момент это лучшее решение. – rgraphix

Смежные вопросы