Удаление пустоты если у анонса новости отсутствует картинка (скрипт, скрины внутри)

Главные вкладки

Аватар пользователя engenes engenes 2 января 2017 в 13:51

Есть список новостей, в каждом элементе есть поля для картики и описания, если нет картинки то описание должно становиться на всю ширину элемента. Написал скрипт, который работает с jquery, ну когда я делаю обрамление в drupal behaverous то перебор элементов идет неправильно.

(function($) {
  Drupal.behaviors.a_module = {
    attach: function(context, settings) {
//удаление пустоты, если в новости отсутствует картинка
      $('.view-id-news.view-display-id-page_list .views-row').each(function(i) {
        console.log(i+'-элемент, '+$(this).eq(i).find('.group-right.field-group-div').length+'-длина');
        if ($(this).eq(i).find('.field-name-field-new-img').length < 1) {
         $(this).eq(i).find('.group-right.field-group-div').css('width', '100%');        
        }
      })
    }
  };
}(jQuery));

обычный jquery не использую так как хочу чтобы и после ajax перезагрузки скрипт продолжал нормально выполняться.
пробовал писать и так:
$('.view-id-news.view-display-id-page_list .views-row', context).once().each(function(i) {
и так:
$('.view-id-news.view-display-id-page_list .views-row').once().each(function(i) {
но результат одинаковый скрипт почему то не находит нужный элемент точнее его отсутствие
и вообще считает длину html кода неправильно. Подскажите что где прописать чтобы перебор заработал как надо?

ВложениеРазмер
Иконка изображения snimok.png214.4 КБ

Лучший ответ

Аватар пользователя engenes engenes 2 января 2017 в 19:57

со стилями все нормально скрипт считает длину html элемента непрпаильно.
Решил проблему написав следующее:

if ($(this, i).find('.field-name-field-new-img').length < 1) {
     $(this, i).find('.group-right.field-group-div').css('width', '100%');
}

Комментарии

Аватар пользователя engenes engenes 2 января 2017 в 19:57

со стилями все нормально скрипт считает длину html элемента непрпаильно.
Решил проблему написав следующее:

if ($(this, i).find('.field-name-field-new-img').length < 1) {
     $(this, i).find('.group-right.field-group-div').css('width', '100%');
}
Аватар пользователя engenes engenes 3 января 2017 в 11:47

Чтобы флоатами не ровнять, не подходит потому что неуниверсально, в зависимости от того, какие ещё блоки будут выводиться на этой странице, float может их испортить. Задача состоит в том, что, если картинки нет то контент растягивается на всю ширину контейнера, ещё можно решить с помощью флексбоксов но пока не все браузеры нормально поддерживают. JS надёжно.
Задача написать универсальный web -скрипт, задачу решил

Аватар пользователя engenes engenes 3 января 2017 в 12:12

Да примеров масса, в день по несколько раз править приходится. ну хочу вдаваться в подробности, достаточно много времени уйдёт чтобы написать примеры.
Тем более вопрос не принципиальный, не хочу время тратить на объяснения. Если проблем не возникает - ровняйте флоатами. В отдельных случаях ими обхожусь.

Аватар пользователя gun_dose gun_dose 3 января 2017 в 12:28

Что за бред? Вешаете флоат на свою картинку (а скорее всего он там у вас уже висит). Если картинка пустая - не выводим ничего. И всё.

Аватар пользователя engenes engenes 3 января 2017 в 14:25

Не бред а неиспользование флоатов, проблему не 1 день знаю, понимаю о чем пишу. Флоаты однозначно использовать не буду. Вопрос Был помочь со скриптом и с тем чтобы, он правильно выполнял перебор и условте условие.
В данном вопросе я не прошу убедить меня использовать флоаты. Условие могло быть и другое, если нет картинки - задать элементу списка цвет, фон, и т.д. Мне принципиально разобраться с работой скрипта на drupale, может быть кто то уже сталкивался с подобным поведением

Аватар пользователя sergeybelya sergeybelya 3 января 2017 в 14:30

Если нет картинки и не умеете юзать флоаты, вешайте соотв. класс, но использовать js для этого неверный подход.