jQuery img.attr ('width') возвращает ноль .. IE7 - PullRequest
1 голос
/ 30 сентября 2011

Работает во всех браузерах, кроме <= IE7 .. </p>

Проверьте этот пример, http://jsfiddle.net/uVRbG/1 в iE7.

Когда я удаляю отображение стиля: ни один из объектов, однако, это работает правильно:

http://jsfiddle.net/uVRbG/2/

Я не понимаю, я просто хочу жестко закодированное значение ... не должно иметь значения, виден ли объект в то время. Есть ли какой-либо другой способ получить ширину и высоту?

Примечание. Мне нужна ширина и высота в документе. Уже не могу дождаться загрузки всех этих изображений, а затем использую img.width ();

HTML:

<div id="test" style="display:none">
<img src="http://neuro.amygdala.net/wp-content/uploads/2007/11/i-stress-test.gif" width="100" height="100" />
</div>

<div id="result"></div>
<div id="result2"></div>

Javascript:

$('#result').html($('#test img:first').attr('width'));
$('#result2').html($('#test img:first')[0].getAttribute('width'));

Спасибо, Уэсли

Ответы [ 5 ]

1 голос
/ 30 сентября 2011

Попробуйте этот обходной путь: используйте visibility:hidden;position:absolute вместо display:none.Затем изображение загружается и позиционируется так, что ширина может быть вычислена.

Если вы хотите показать изображение позже, измените его на position:relative одновременно.

http://jsfiddle.net/uVRbG/7/

1 голос
/ 30 сентября 2011

Вы можете просто использовать jquery.hide () вместо отображения none и сохранить ширину в переменной до того, как она будет скрыта?

0 голосов
/ 30 сентября 2011

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

0 голосов
/ 30 сентября 2011
.width()

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

У меня всегда были проблемы с :first и :last псевдоселекторов в IE, это может быть просто не выбор изображения..attr() не содержит ошибок с display:none afaik.

Надеюсь, это поможет

РЕДАКТИРОВАТЬ: Попробуйте добавить это к вашей скрипке:

var imgWidth = $($('#test').html()).attr('width');
alert(imgWidth);

Битхакерский обходной путь, но может сработать.Я пробовал и не могу протестировать с IE7, он выдает ошибку сценария при загрузке jsfiddle>: (* ​​1015 *

РЕДАКТИРОВАТЬ: в крайнем случае, регулярное выражение:

var imgWidth = $('#test').html().search(/width=[\"\'][0-9]+/);
alert(imgWidth);
0 голосов
/ 30 сентября 2011

Попробуйте использовать

.width()

вместо

http://jsfiddle.net/uVRbG/3/

...