Первая проблема заключается в том, что вы дублируете атрибуты id
в l oop. Они имеют , чтобы быть уникальными в DOM. Чтобы исправить это, используйте классы и обойдите DOM, чтобы связать элементы друг с другом.
Имея это в виду, вы можете выбрать элементы .open-game
напрямую и предоставить функцию для text()
, которая возвращает их содержимое на основе их связанные .provlepsi
. Попробуйте это:
$('.open-game').text(function() {
var $wrapper = $(this).closest('.game-wrapper');
return $wrapper.find('.provlepsi').is(':empty') ? 'Open' : 'Closed';
});
.game-wrapper {
border: 1px solid #CCC;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="game-wrapper">
<div class="col-145">
<p class="provlepsi">provlepsi_live_game</p>
</div>
<div class="col-145">
<p>epityxia_agwna_live_game</p>
</div>
<div class="col-145">
<p class="open-game"></p>
</div>
</div>
<div class="game-wrapper">
<div class="col-145">
<p class="provlepsi"></p>
</div>
<div class="col-145">
<p>epityxia_agwna_live_game</p>
</div>
<div class="col-145">
<p class="open-game"></p>
</div>
</div>
Обратите внимание, что в HTML были внесены незначительные изменения, так что каждый .game-wrapper
содержит только одну игру, а не несколько.
Также помните, что вам не нужно содержать пробелы в элементе, когда вы собираетесь проверить его с помощью :empty
, поэтому убедитесь, что вы правильно отформатировали вывод HTML / PHP, как показано выше.
В этом коде как правильно добавить класс, если он пуст?
Для одновременного добавления класса к элементу необходимо использовать полный each()
l oop вместе с toggleClass
, вот так:
$('.open-game').each(function() {
var $game = $(this);
var $wrapper = $game.closest('.game-wrapper');
var isEmpty = $wrapper.find('.provlepsi').is(':empty');
$game.text(isEmpty ? 'Open' : 'Closed').toggleClass('foo', isEmpty);
});