webirus
@webirus
Тыжверстальщик! Наверстай мне упущенное...

Как упростить код и сделать его более гибким?

Добрый день.
Есть у меня вот такой код, найденный на просторах сети.

var mainDivs1 = $(".newsblock");
var maxHeight1 = 0;
for (var i = 0; i < mainDivs1.length; ++i) {
    if (maxHeight1 < $(mainDivs1[i]).height()) {
        maxHeight1 = $(mainDivs1[i]).height();
    }
}
for (var i = 0; i < mainDivs1.length; ++i) {
    $(mainDivs1[i]).height(maxHeight1);
};

Собственно, что оно делает? Ищет все дивы по названию, ловит высоту максимального и остальным делают такую же.

Уважаемые знатоки, внимание вопрос!

Как сделать этот код более гибким, чтобы можно было задавать больше переменных?
Но чтобы код правильно сравнивал. Только .newsblock с другими .newsblock.


Сейчас я просто дубликую код, добавляя в переменные 1, 2, 3, 4.
Но это не панацея, хочется умного решения.

var mainDivs1 = $(".newsblock"); // первый нужный блок, для выравнивания newsblock
var mainDivs2 = $(".newsblock_link"); // второй нужный блок, для выравнивания newsblock_link
var mainDivs3 = $(".newsblock_image"); // третий нужный блок, для выравнивания newsblock_image
var mainDivs4 = $(".newsblock_text"); // четвертый нужный блок, для выравнивания newsblock_text
// а вот тут я впадаю немного в ступор, как составить скрипт...
var maxHeight[?] = 0;
for (var i = 0; i < mainDivs[?].length; ++i) {
    if (maxHeight[?] < $(mainDivs[?][i]).height()) {
        maxHeight[?] = $(mainDivs[?][i]).height();
    }
}
for (var i = 0; i < mainDivs[?].length; ++i) {
    $(mainDivs[?][i]).height(maxHeight[?]);
};

Вот мои горестные попытки решить вопрос https://jsfiddle.net/webirus/4ujesjws/2/

PS: Решения через CSS не прокатят) Слишком много нюансов, которые нужно учесть.
  • Вопрос задан
  • 207 просмотров
Решения вопроса 2
lazalu68
@lazalu68
Salmon
В общем может я что-то неправильно понял, но мне показалось, что если вы используете jQuery, вполне есть смысл пользоваться им, оформить всё это в метод:

jQuery.fn.extend({
  equalHeights: function() {
    var maxHeight = 0;
    for (var i = 0; i < this.length; ++i) {
      if (maxHeight < this.eq(i).height()) {
        maxHeight = this.eq(i).height();
      }
    }
    for (var i = 0; i < this.length; ++i) {
      this.eq(i).height(maxHeight);
    };
    return this;
  }
});


Вот как оно работает
Ответ написан
iiiBird
@iiiBird
Пока ты спишь - твой конкурент совершенствуется
Никита Полевой Прикольная идея) Спасибо. Усовершенствовал свой дефолтный универсальный адаптивный построчный выравниватель по твоему методу) оставлю здесь. мб ТС'у тоже пригодится) https://jsfiddle.net/iBird/oyzufz27/1/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
var maxHeight = 0;
var mainDivs = $(".newsblock, .newsblock_link, .newsblock_image, .newsblock_text");
mainDivs.each(function() {
  if ($(this).height() >  maxHeight)
  	maxHeight = $(this).height();
});
mainDivs.height(maxHeight);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы