JQuery ближайший не хочет работать

Я повторил вниз изображение страницы с div рядом с ним, как это:

 <img src="/img/productspage/questionMark.jpg" class="prodQuestionMark" />
            <div class="vuQuestionBubble">
                <p>this is where text for the text will go</p>
            </div>

vuQuestionBubble имеет стиль отображения: по умолчанию нет. когда нажата кнопка "prodQuestionMark", я хочу, чтобы рядом с ней отображался пузырь vuQuestionBubble. Я положил этот код внизу.

$(document).ready(function () {
    $('.prodQuestionMark').click(function () {

        $(this).closest('vuQuestionBubble').show();
    });
});

кажется, что это не работает... событие click работает, и я могу выбрать родительский div с помощью.parent, но не могу взаимодействовать с ближайшим div... есть идеи?

5 ответов

Решение

closest ищет предков, а не братьев и сестер; Кроме того, ваш селектор отсутствует . в начале (вы говорите, чтобы искать vuQuestionBubble элемент, где вы действительно имеете в виду div с классом "vuQuestionBubble").

С вашей текущей структурой вы можете использовать next потому что div с "vuQuestionBubble" является следующим элементом. Однако, если вы когда-нибудь измените свою структуру и поместите что-то между ними, next не будет работать для вас.

Я бы наверное использовал nextAll("div.vuQuestionBubble:first") или же nextAll(".vuQuestionBubble:first") (ссылки: nextAll, :first):

$(document).ready(function () {
    $('.prodQuestionMark').click(function () {

        $(this).nextAll('div.vuQuestionBubble:first').show();
        // Or without `div`:
        //$(this).nextAll('.vuQuestionBubble:first').show();
    });
});

Это найдет первый div с классом "vuQuestionBubble", который следует за img как брат, даже если это не тот, рядом с img и, таким образом, делает ваш код менее восприимчивым к проблемам обслуживания, если разметка изменяется незначительно.

closest Функция находит ближайшего предка к элементу. Вам действительно нужно использовать .next('.vuQuestionBubble'),

vuQuestionBubble это класс

$(this).closest('vuQuestionBubble').show();
=>
$(this).closest('.vuQuestionBubble').show();

closest переходы к элементу предка, поэтому попробуйте siblings('vuQuestionBubble')

Описание: Получить первый элемент-предок, соответствующий селектору, начиная с текущего элемента и продвигаясь вверх по дереву DOM.

Переведено: Ближайшие, очевидно, получает предков, а не братьев и сестер.

ссылка: http://api.jquery.com/closest/

Есть перерыв, есть кит кат.

Другие вопросы по тегам