Задать вопрос
@JustFeeLin
Начинающий веб-мастер

Как удалить класс у элемента при отсутствии определенного дочернего элемента?

Суть задачи:
Сайт на WP запиленный непонятно кем.
Попросили поправить маленький косяк:
Ко всем ссылкам через плагин добавляется класс (например, myclass) для создания эффекта lightbox для увеличения картинок.
Данный класс вешается также и на обычные ссылки, и при переходе по обычной ссылке внутренние страницы пытаются открыться во всплывающем окне.

Как я думаю можно было бы решить проблему: сделать проверку на наличие внутри ссылки картинки, и при ее отсутствии удалить класс у ссылки.

Вот как выглядит код картинки внутри ссылки на сайте:

<a href="picture.jpg" class="myclass"><img src="picture.jpg"></a>

Пробовал написать такое:

$(document).ready(function() {
   var anyf = $('a').children('img').length;
   if (anyf < 1) 
      {
        $('.myclass').removeClass('myclass')
      };
  }
    )

Но код делает абсолютно не то, что хотелось бы.

Убрать автоматическое добавление класса не вариант, тк сайтом занимаются "тетеньки", которые новость просят опубликовать хоть кого-нибудь.
Отключить плагин и поставить другой тоже не получится (шаблон написан так, что при отключении плагина начинают вылезать ошибки на разных страницах).
  • Вопрос задан
  • 251 просмотр
Подписаться 1 Простой Комментировать
Решение пользователя MrTimon К ответам на вопрос (2)
@MrTimon
Как вариант удалить все класы "myclass" и добавить только там где нужно самому, аля:
<script>
  $(document).ready(function() {
      $('a.myClass').removeClass('myClass');
      $('img').parent('a').addClass('myClass');
  });
</script>


Можно немножко усложнить и перебирать все имиджи детально и искать парент ссылки где src имиджа равно href параметру ссылки и только им добавлять клас.

другой способ перебрать все ссылки каторые имеют имдж как сделали вы толко надо так:
$(document).ready(function() {
      $('a.myClass').filter(function(item) {
            return $('>img',$(item)).length == 0
      }).removeClass('myClass');
  });


Должно работать
Ответ написан