Подтвердить что ты не робот

JQuery/Javascript css ( "width" )/проверить, определен ли стиль в css?

У меня есть таблица стилей, которая определяет ширину по умолчанию для изображений. Когда я читаю стиль ширины изображения с помощью jQuery width(), он возвращает правую ширину. Он также возвращает ту же ширину, когда я вызываю css("width"). Но если в таблице стилей нет ширины, функция css("width") также вернет вычисленное значение width(), но не сообщит undefined или auto или что-то в этом роде.

Любые идеи, как я мог узнать, есть ли стиль в коде CSS или не определен?

Решение работает для меня в кросс-браузере. Спасибо всем за помощь:

$(this).addClass("default_width_check");
var width = ($(this).width() == 12345) ? 'none-defined' : $(this).width();
var height = ($(this).height() == 12345) ? 'none-defined' : $(this).height();
$(this).removeClass("default_width_check");

.default_width_check {
    width: 12345;
}
4b9b3361

Ответ 1

У меня есть обходная идея, которая может работать.

Определите класс с именем default_width перед всеми другими таблицами стилей:

.default_width { width: 1787px }  
/* An arbitrary value unlikely to be an image width, but not too large
   in case the browser reserves memory for it */

чтобы узнать, имеет ли изображение ширину:

  • Клонировать его в jQuery: element = $("#img").clone()

  • дает клонированный элемент класс default_width: element.addClass("default_width")

  • Если его ширина равна 1787px, она не имеет ширины - или, конечно, имеет размер 1787px в ширину, что является единственным случаем, когда этот метод не будет работать.

Я не совсем уверен, будет ли это работать, но может. Изменить. Как отмечает @bobince в комментариях, вам нужно будет вставить элемент в DOM для всех примененных классов, чтобы сделать правильный расчет ширины.

Ответ 2

Нет, метод getComputedStyle(), по которому зависит функция jQuery css(), не может различать ширину, вычисленную из auto vs явной ширины. Вы не можете определить, было ли что-то задано в таблице стилей, только из прямой inline style="width: ..." (которая отражается в свойстве element .style.width).

currentStyle работает по-другому и даст вам auto, однако это нестандартное расширение IE.

Если вам действительно захотелось это сделать, вы можете перебирать document.styleSheets, прочитывая каждое из своих объявлений, выбирая селектор и запрашивая его, чтобы увидеть, соответствует ли ваш целевой элемент, а затем, если он содержит width править. Это было бы, однако, медленным и не совсем весело, тем более что IE styleSheet DOM отличается от других браузеров. (И он по-прежнему не справляется с псевдоэлементами и псевдоклассами, например :hover.)

Ответ 3

Вы можете использовать image.style.width (изображение должно быть вашим элементом). Это возвращает пустую строку, если она не определена в CSS.

Ответ 4

Вы можете проверить элемент style.cssText, если определена ширина;

<img id="pic" style="width:20px;" src="http://sstatic.net/ads/img/careers-ad-header-so.png" />

var pic = document.getElementById('pic');
alert(pic.style.cssText);

Но обратите внимание на следующие стили

border-width: 10px;
width: 10px;

вы должны соответствовать только ширине рамки.