@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')
      };
  }
    )

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

Убрать автоматическое добавление класса не вариант, тк сайтом занимаются "тетеньки", которые новость просят опубликовать хоть кого-нибудь.
Отключить плагин и поставить другой тоже не получится (шаблон написан так, что при отключении плагина начинают вылезать ошибки на разных страницах).
  • Вопрос задан
  • 237 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
$('a.myclass:not(:has(> img))').removeClass('myclass');

или

[...document.querySelectorAll('a.myclass')]
  .filter(n => ![...n.children].some(m => m.tagName === 'IMG'))
  .forEach(n => n.classList.remove('myclass'));
Ответ написан
@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');
  });


Должно работать
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 07:47
2000 руб./за проект
26 апр. 2024, в 06:46
1000 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект