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

0

Моя проблема: я пытаюсь сделать функцию для перемещения классов ("prev", "current" и "next") из трех divs в следующие три div "menuItem" при нажатии клавиши со стрелкой вниз (код ключа 40), Единственная проблема заключается в том, как я могу ссылаться на следующие три div без создания объектов JS для каждого div и затем писать код для переключения классов между каждым div? В любом случае, я могу это сделать? jQuery UI имеет этот метод класса коммутатора, который поможет переключать классы. Я могу переключать классы среди div, которым присваиваются атрибуты класса "prev", "current" и "next", без проблем. Это переключает "следующий" класс на следующий div, что является проблемой. Я думал, что один из способов сделать это - ссылаться на индекс или, скорее, индекс элемента после div с атрибутом "next" класса, но не выяснили, как это сделать.

пример HTML:

<div class ="menu">
    <div>content</div>
    <div class ="menuItem prev">content</div>
    <div class ="menuItem current">content</div>
    <div class ="MenuItem next">content</div>
    <div class="MenuItem">content</div>
    <div class ="MenuItem">content</div>
    <div>content</div>
</div>

пример JS:

function handleArrowKeydown(e){
                event.preventDefault();
                var scrollPos = menu.scrollTop();
                var prevItem = $(".previous"); 
                var currentItem = $(".current");
                var nextItem = $(".next");


                function classUpdater () {
                    prevItem.removeClass('previous');
                    currentItem.addClass('previous');
                    nextItem.addClass('current');
                    currentItem.removeClass('current');
                    return; 
                }

                //code to execute on keydown of up arrow key
                if (e.keyCode == '38'){

                    menu.animate({
                        "scrollTop":( scrollPos - 240) 
                    }, 300);
                }
                //code to execute on keydown of down arrow key
                else if (e.keyCode == '40'){
                    menu.animate({
                        "scrollTop":( scrollPos + 240)
                    }, 300);
                    console.log("down arrow pressed");
                }
            } 
            zoom.on({
                "MozMousePixelScroll": handleMouseScroll,
                "mousewheel": handleMouseScroll
            });
            window.addEventListener("keydown", handleArrowKeydown, false);

    });
  • 0
    Вы смотрели на метод .next () в jquery? Вы можете использовать $ (this) .next (". menuitem"), чтобы получить следующий div в DOM.
  • 0
    Нет, я даже не подумал посмотреть, существует ли метод next (), хотя я не чужд обходу DOM в jQuery. Я буду помнить эти методы, хотя! Я все еще в начале своей карьеры программиста, и я думаю, что чем больше я создаю веб-сайты и чем больше становится моя кодовая база, тем лучше я вспоминаю некоторые из этих методов, но не часто ли вы обнаруживаете, что ищете методы, когда забываете? Бекенд-кодер, который учил меня однажды, сказал мне, что он выучил так много языков, что он часто находит методы поиска в Google.
Показать ещё 1 комментарий
Теги:
dom

2 ответа

0
Лучший ответ

Вот рабочий стол, который использует селектора next() и prev() для перемещения классов между элементами. (Нажмите на панели результатов, затем используйте стрелки вверх и вниз. Это также повторяется, если вы удерживаете клавишу со стрелкой вниз.)

И вот код:

HTML

<div class ="menu">
    <div>content</div>
    <div class ="menuItem prev">content</div>
    <div class ="menuItem current">content</div>
    <div class ="menuItem next">content</div>
    <div class="menuItem">content</div>
    <div class ="menuItem">content</div>
    <div>content</div>
</div>

JS

$(function() {
    $(document).on("keydown", function(e) {
        if (e.keyCode == 38) { //up arrow
            e.preventDefault();

            var menu = $("div.menu");

            //get the current prev div
            var prev = menu.find("div.prev");

            //get the next prev div
            var nextprev = prev.prev();

            //see if we can move up any more
            if (nextprev.length > 0) {
                //move the prev class
                prev.removeClass("prev");
                nextprev.addClass("prev");

                //move the current class
                menu.find("div.current")
                    .removeClass("current")
                    .prev()
                    .addClass("current");

                //move the prev class
                menu.find("div.next")
                    .removeClass("next")
                    .prev()
                    .addClass("next");
            }
        }
        if (e.keyCode == 40) { //down arrow
            e.preventDefault();

            var menu = $("div.menu");

            //get the current next div
            var next = menu.find("div.next");

            //get the next next div
            var nextnext = next.next();

            //see if we can move down any more
            if (nextnext.length > 0) {
                //move the next class
                next.removeClass("next");
                nextnext.addClass("next");

                //move the current class
                menu.find("div.current")
                    .removeClass("current")
                    .next()
                    .addClass("current");

                //move the prev class
                menu.find("div.prev")
                    .removeClass("prev")
                    .next()
                    .addClass("prev");
            }
        }
    });
});

CSS

.prev { 
    color: red;
}

.current {
    color: blue;
    font-weight: bold;
}

.next {
    color: green;
}
0

Вы пытались использовать селектора jQuery?

$(this).next("div") // will return the next div
$(this).prev("div") // will return the previous div
$(this).next().next() // will return the element after the next element

В jQuery есть много полезных инструментов для перемещения DOM, таких как parent(), find(), child(), prev() и next(). Используйте их в своих интересах, но не забудьте включить jQuery, если вы еще этого не сделали.

  • 0
    Будет ли селектор $ (this) текущим элементом меню, а затем .next и .prev - это div и выше и выше соответственно? Я не так часто использовал этот селектор, но я использую jQuery. Я использовал дочерний родительский и нашел, но даже не думал, посмотрите, был ли селектор prev () или next ().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню