Поиск элемента с помощью JQuery, чей индекс совпадает с переменной count

У меня настроен скроллер изображения, и я веду счет текущего элемента через переменную с именем current_item. Теперь я хочу отобразить альтернативный текст изображения в списке изображений, индекс которых соответствует item_count.

Вот JQuery

var scroll_text = $('#ax_campaign_content li').index(current_item).children('img').attr('alt');
$('#ax_campaign_scroller h4').text(scroll_text);

И это основная структура HTML:

<div id="ax_campaign_content">
    <ul>
    <li><img alt="Image 1"></li>
    <li><img alt="Image 2"></li>
</ul>
</div>

<div id="ax_campaign_scroller">
    <h4>Image Text Goes Here</h4>
</div>

Это то, что я пытаюсь сделать, но это не работает. Кто-нибудь видит, где я иду не так?

3 ответа

Решение

Ваш код будет повторять li элементы, а затем итерировать изображения внутри этого li, который всегда будет только одним изображением. То, что вы делаете, никогда не будет иметь ничего общего с current_item переменная.

Вместо этого вы можете попробовать пройти current_item в .eq сначала получить li элемент с этим индексом, а затем получить изображение alt атрибут:

var scroll_text = $("#ax_campaign_content li")
    .eq(current_item)
    .find("img").attr("alt");

$("#ax_campaign_scroller h4")
    .text(scroll_text);

Или вы можете сделать это с помощью одной строки (добавлены новые строки и вкладки для удобства чтения) и выбрать изображение в том же селекторе, не используя .find:

$("#ax_campaign_scroller h4").text(
    $("#ax_campaign_content li:eq("+current_item+") img")
        .attr("alt")
);

Попробуйте метод eq - http://api.jquery.com/eq/

$('#ax_campaign_content li img').eq(current_item).attr('alt');

Каждый из них проходит по каждому элементу li, поэтому, когда вы ищите img внутри каждой функции, вы просматриваете внутри li:

$(this).children("img").index()

Всегда будет возвращать ноль, так как у вас есть только 1 img внутри каждого li.

Jquery.each уже дает вам индекс, так что вы можете просто проверить его с вашим current_item следующим образом:

$('#ax_campaign_content li').each(function(index) {
        if (index == current_item){
        scroll_text = $(this).children('img').attr('alt');
        $('#ax_campaign_scroller h4').text(scroll_text);
    }
});

Отвечая на обновленный комментарий: Вы всегда можете перейти на однострочник!

$('#ax_campaign_scroller h4').text(
    $('#ax_campaign_content li').eq(current_item).children('img').attr('alt')
);
Другие вопросы по тегам