Ширина обнаружения: авто в jQuery
Я извлекаю ширину элементов, используя jQuery, и предпочел бы, если бы я мог указать, была ли указана явная ширина (и высота).
<div id="test"></div>
<script type="text/javascript">
$(function() { alert($('#test').css('width')); });
</script>
Это будет предупреждать неявную ширину div в терминах количества пикселей, которые он занимает на экране клиента. Есть ли способ, что если ширина отсутствует или установлена как width: auto
, ее можно проверить с помощью jQuery?
То есть вместо приведенного выше примера, возвращающего целое число, он возвращает либо auto
, либо undefined
. Или, альтернативно, существует эквивалент функции isAuto
?
Ответы
Ответ 1
Я не думаю, что это возможно на данный момент. По крайней мере, ни в каком другом браузере, кроме IE. IE реализует element.currentStyle
, который представляет стили при написании в файле CSS. С другой стороны, остальные браузеры реализуют window.getComputedStyle
, который возвращает вычисленные значения этих стилей. То, что вы получаете там, числовое значение вместо auto.
Единственный способ обойти его - разобрать объявления CSS из document.styleSheets
.
Литература:
Ответ 2
Это приведет к абсолютной величине строки "auto" или "180px".
$('element').prop('style').width
для ширины или
$('element').prop('style').height
для высоты.
Ответ 3
$('#test')[0].style.width=="auto"
должен работать: http://jsfiddle.net/KxTLE/ и http://jsfiddle.net/KxTLE/1/забастовкa > Попробуйте
jQuery.fn.isAuto=function() {
if(this[0]) {
var ele=$(this[0]);
if(this[0].style.width=='auto' || ele.outerWidth()==ele.parent().width()) {
return true;
} else {
return false;
}
}
return undefined;
};
И пример: http://jsfiddle.net/KxTLE/6/
Ответ 4
Насколько я знаю, нет встроенной функции jQuery для определения автоматической ширины или высоты. Поэтому я написал плагин, чтобы сделать это.
$.fn.isAuto = function(dimension){
if (dimension == 'width'){
var originalWidth = this.innerWidth();
var marginLeft = parseInt(this.css('margin-left'));
var testMarginWidth = marginLeft+50;
this.css('margin-left', testMarginWidth);
var newWidth = this.innerWidth();
this.css('margin-left', marginLeft);
if(newWidth<originalWidth){
return true;
}
else{
return false;
}
}
else if(dimension == 'height'){
var originalHeight = this.height();
this.append('<div id="test"></div>');
var testHeight = originalHeight+500;
$('#test').css({height: testHeight});
var newHeight = this.height();
$('#test').remove();
if(newHeight>originalHeight){
return true;
}
else{
return false;
}
}
};
Первоначально я написал это, чтобы сделать высоту, поэтому я просто расширил ее, включив в нее ширину. Вы просто назовете это так:
$('#element').isAuto('width');
или
$('#element').isAuto('height');
Вот fiddle, демонстрирующий функциональность плагина.
Ответ 5
Я не совсем уверен, правильно ли я отвечаю на ваш вопрос, но если вы используете функцию width(), это даст вам целое число, представляющее отображаемую ширину в пикселях.
Ответ 6
- создать функцию
- передать идентификатор элемента css в функцию
- напишите случай, когда оператор, выполняемый по свойству width элемента id
ПРИМЕЧАНИЕ: для использования на многоуровневых элементах было бы разумно использовать цикл с массивом имен элементов