Как проверить, имеет ли div высоту liquid / auto?

#javascript #jquery #html #css

#javascript #jquery #HTML #css

Вопрос:

Мне нужно проверить в javascript (или, может быть, jQuery), имеет ли div свойство css height:auto , или, может быть, проверить, не установлена ли у этого div какая-либо высота? Но на самом деле браузер действует так, как будто он продолжает вычислять текущую высоту div, а затем присваивает ее этому div. Таким образом, на самом деле div всегда имеет установленную высоту, даже если в css мы сказали, что div должен быть in height:auto . Как я могу это сделать?

Комментарии:

1. jw, при каких обстоятельствах вам нужна эта функциональность? Вы пытаетесь получить высоту элемента, даже если для высоты установлено значение auto?

2. На самом деле все с точностью до наоборот. Я не хочу извлекать значение, которое я хочу только определить (с помощью JS), является ли div liquid или нет.

Ответ №1:

Вот мое решение, которое я успешно реализовал в своем плагине jQuery, ScaleText:

   function checkAutoHeight(el) {
    // Get the original height of the parent.
    var origHeight = $(el).parent().outerHeight();

    // Create a 1px bump in the size of the element you are checking.
    var tester = $(el).append('<div class="scaleTextHeightCheck" style="display: block; height: 1px; width: 1px; content: '';""></div>');

    // Check to see if the parent increased by 1px as a result of the bump.
    var newHeight = $(el).parent().outerHeight();

    // Cleanup.
    $('.scaleTextHeightCheck').detach();

    // Return the result.
    return (origHeight < newHeight);
  }
  

Ответ №2:

вы можете сделать это в IE, используя атрибут currentStyle

 var height= document.getElementById('divid').currentStyle.height;
  

К сожалению, вы не можете сделать это ни в одном другом браузере (я думаю, это единственное, что мне нравится в IE). На самом деле вы можете это сделать, но не прямым способом.

Способ обхода в других браузерах следующий:

сначала вы должны проверить встроенный атрибут высоты (это может быть таблица, которой разрешено его использовать), затем вам нужно найти встроенный атрибут стиля и проверить, определена ли у него высота. Затем вам нужно перебрать все стили в вашем документе и определить более строгий стиль обработки, а также проверить, есть ли другой, менее строгий, но с модификатором !important .

Как вы можете видеть, это непростой процесс, поэтому в других браузерах это возможно, но непросто. Если вы ориентируетесь только на IE, тогда все готово 🙂

Удачи!

Ответ №3:

Вчера я боролся с этим, но нашел хак, который работает.

Плагин

 $.fn.isAuto = function(){
    var originalHeight = this.height();
    this.append('<div id="test"></div>');
    var testHeight = originalHeight 500;
    $('#test').css({height: testHeight});
    var newTestHeight = $('#test').height();
    var newHeight = this.height();
    $('#test').remove();
    if(newHeight>originalHeight){
        return true;    
    }
    else{
        return false;
    }
};
  

Вот скрипка, демонстрирующая плагин.

По сути, плагин добавляет div внутри исходного элемента и придает ему высоту, большую, чем у исходного элемента. Если новая высота исходного элемента больше исходной высоты, элемент вырос, а высота автоматически.

Ответ №4:

Проверьте значения одного из следующих, чтобы узнать, могут ли они вам помочь

 document.getElementById ( 'divid' ).style.height
$('#divid').css ( 'height' )
$('#divid')[0].style.height
  

Очевидно, что divid — это идентификатор вашего div