Есть ли способ обнаружить неявные и явные значения высоты CSS в jQuery?
В jQuery оба $('#foo').height()
и $('#foo').css('height')
возвращают значение, даже если свойство height не было явно задано с помощью CSS. Есть ли способ обнаружить, если элемент не имеет явной высоты, т.е. Он просто отображается в соответствии с его содержимым?
Вот пример, который я написал, чтобы продемонстрировать: http://jsfiddle.net/Enn6p/2/
ИЗМЕНИТЬ
Чтобы уточнить мой вопрос, $('#foo').css('min-height')
и $('#foo').css('max-height')
уже корректно возвращают пустую строку, если они явно не заданы. Я ищу способ узнать, устанавливается ли явное значение height
через CSS или нет.
ИСПОЛЬЗОВАНИЕ CASE
У меня есть script, который пытается сделать floated элементы одинаковой высоты. Он делает это, перебирая элементы, чтобы увидеть, какой из них самый высокий, затем применив эту высоту ко всем из них. В некоторых случаях эти элементы уже имеют явное значение высоты, но остальные отображаются неявно.
Теперь я хочу добавить возможность отменить это, и все вернется к их первоначальной высоте. Чтобы сделать это, мне нужно знать, был ли элемент первоначально установленным по высоте, или если высота была "авто". Как только я смогу сделать это, я могу сохранить исходное значение в коллекции данных для элемента, а затем использовать это, чтобы позже вернуться к исходной высоте.
Ответы
Ответ 1
В некоторых старых версиях jQuery было возможно:
http://jsfiddle.net/strikernl/y3P3A/
но теперь вы должны просто использовать такую функцию, как:
function sizeDefined(obj){
var tmp = obj.clone().html('').appendTo($('body'));
var w = (tmp.width()==0 ? "no":"yes");
var h = (tmp.height()==0 ? "no":"yes");
tmp.remove();
return [w,h];
}
http://jsfiddle.net/Enn6p/12/
Ответ 2
В принципе, если вы избавитесь от содержимого элемента и измерите его высоту, он будет равен 0, если только он не имеет ранее установленную высоту (как стиль). Итак, рассуждая:
function hasSetHeight(elem){
var html=elem.html();
elem.html('');
height = elem.height();
elem.html(html);
return (height > 0);
}
удаляет все содержимое элемента, измеряет его высоту и возвращает true или false, если элемент имеет заданную высоту или нет.