Задать вопрос
@Mishcake

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

Нужно найти родительский label при наличии дива с нужным текстом.

<label class="clearfix form-position selected" id="formPosition" data-offer-id="123">
  <div class="pull-left form-position-checker">
    <input class="form-position-input form-position-offer" data-price-value="0" data-old-price-value="1000" data-price-currency="руб." data-qty-value="1" id="input-formPosition" name="formParams[offer_id][]" type="radio" checked="" value="">
  </div>
  <div class="pull-left form-position-title" data-start="2020-10-05 00:00:00">
    <span class="offer-title">Диагностика</span>
    <div class="text-muted small stream-vacant"">Мест нет</div>
  </div>
</label>

Мне нужно найти label от дочернего

<div class="text-muted small stream-vacant"">Мест нет</div>

Логика такая: я проверяю при загрузке страницы текст внутри этого дива и если он "Мест нет", то я хочу скрыть label.

if ($('.stream-vacant:contains("Мест нет")')) {
  $('??????????').hide();
}
  • Вопрос задан
  • 208 просмотров
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик расширенный
    13 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
Решения вопроса 3
RAX7
@RAX7
Ответ написан
Комментировать
@Eugeny1987
Работаю с HostCMS
И не нужны никакие проверки
$('.stream-vacant:contains("Мест нет")').closest('label').hide();
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
Кого надо скрыть, кто внутри и какой текст должен содержать:

const itemSelector = 'label.form-position';
const textSelector = `${itemSelector} .stream-vacant`;
const text = 'Мест нет';

Вариант раз - поднимаемся от элемента с текстом к скрываемому элементу, проверяем, что текст элемента полностью совпадает с заданным текстом:

.hidden {
  display: none;
}

for (const n of document.querySelectorAll(textSelector)) n
  .closest(itemSelector)
  .classList
  .toggle('hidden', n.textContent === text);

Вариант два - ищем элемент с текстом внутри скрываемого элемента, проверяем, он содержит заданный текст в качестве подстроки, без учёта регистра:

document.querySelectorAll(itemSelector).forEach(function(n) {
  n.hidden = n
    .querySelector(textSelector)
    ?.innerText
    .toLowerCase()
    .includes(this);
}, text.toLowerCase());
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@dimadv7
Веду блог на тему создания landing page
Может как-то так:
if ($('.stream-vacant:contains("Мест нет")')) {
        let currentLabel = $('.stream-vacant:contains("Мест нет")').parents('#formPosition');
        currentLabel.hide();
}
Ответ написан
Ваш ответ на вопрос

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

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