Использование jQuery для добавления класса к содержанию li при нажатии флажка внутри

Цель

Выделите (добавив background-color to) "row" <li>, если щелкнуть флажок (вложенной) внутри этой строки.

Фон

В этой функции я работаю над интерфейсом для системы управления файлами. Когда пользователь нажмет на этот флажок, они смогут удалить все проверенные файлы. чтобы дать им визуальную обратную связь, я хочу, чтобы все их выбранные файлы имели цвет фона. Это будет сделано, щелкнув флажок, затем я хочу, чтобы цвет <li> был окрашен.

Текущее состояние

Я нашел различные полезные ответы на stackoverflow, но имел пробел в знаниях и пытался заполнить это. Большинство ответов используют родительский элемент. Но это только помогает мне, окрашивая этого конкретного родителя, который имеет флажок.

введите описание изображения здесь

код

У меня есть эта демонстрация на codepen

JQuery

$("#this-list :checkbox").on('click', function(){
    $(this).parent().toggleClass("checked");
});

CSS

.checked {
    background: red;
}

HTML

<div class="container">
    <ul id="this-list">

        <li>
            <div class="row">
                <div class="col-md-2">
                    <input type="checkbox" />
                    song.mp3
                </div>
                <div class="col-md-2">
                    2011
                </div>
                <div class="col-md-2">
                    1 gb
                </div>
                <div class="col-md-2">
                    2 min
                </div>
            </div>
        </li>

    <!-- More <li>s -->
    </ul>
</div>

Ответ 1

вы можете использовать closest для получения ближайших флажков li:

$("#this-list :checkbox").on('click', function(){
    $(this).closest('li').toggleClass("checked");
});

этот метод выдувает DOM, начиная с флажка, пока не найдет совпадение для данного селектора (li в этом случае).

Ответ 2

Использовать .parents([селектор])

Для li вы хотите это

$(this).parents('li').toggleClass("checked");

Или, если вам нужна только выделенная строка

$(this).parents('.row').toggleClass("checked");

Или, если вы хотите, чтобы выделенная ячейка была выделена

$(this).parents('.col-md-2').toggleClass("checked");

Ответ 3

Вы очень близки! Вы можете использовать метод .parents() jQuery и пройти в классе .row. Это будет выглядеть так:

$("#this-list :checkbox").on('click', function(){
    $(this).parents(".row").toggleClass("checked");
});

ИЗМЕНИТЬ:

Как отметил @showdev, если вы хотите элемент li, вы можете просто сделать:

$(this).parents("li").toggleClass("checked"); 

Ответ 4

Как в этом Codepen

$("#this-list :checkbox").on('click', function(){
    $(this).closest("li").toggleClass("checked");
});

В качестве альтернативы, поскольку флажок содержится внутри div, который находится внутри целевого li, вы можете использовать: Codepen

$("#this-list :checkbox").on('click', function(){
   $(this).parent().parent().toggleClass("checked");
});

Ответ 5

Просто добавьте еще один .parent(), чтобы добавить класс checked в строку (родительский элемент родителя):

$(this).parent().parent().toggleClass("checked");

Смотрите CodePen fork.