Javascript - 如何使用键盘箭头键更改焦点在列表中的链接

Hof*_*ffZ 3 html javascript navigation jquery focus

当链接没有包含在其他元素中时,我能够改变焦点.

这有效:

HTML

<a id="first" href="#" class='move'>Link</a>
<a href="#" class='move'>Link</a>
<a href="#" class='move'>Link</a>
Run Code Online (Sandbox Code Playgroud)

JS(使用jQuery)

$(document).keydown(
    function(e)
    {    
        // Down key
        if (e.keyCode == 40) {      
            $(".move:focus").next().focus();       
        }

        // Up key
        if (e.keyCode == 38) {      
            $(".move:focus").prev().focus();       
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

演示小提琴

但是,当链接在列表中时,如何实现相同的功能呢?像这样

<ul>
    <li>
        <a id="first" href="#" class='move'>Link</a>
    </li>
    <li>
        <a href="#" class='move'>Link</a>
    </li>
    <li>
        <a href="#" class='move'>Link</a>
    </li>
</ul> 
Run Code Online (Sandbox Code Playgroud)

Ant*_*ton 6

您可以使用.closest()查找父元素,然后使用.next()获取下一个li,然后使用.find()获取下一个.move

    if (e.keyCode == 40) {      
        $(".move:focus").closest('li').next().find('a.move').focus();   
    }

    // Up key
    if (e.keyCode == 38) {      
        $(".move:focus").closest('li').prev().find('a.move').focus();   
    }
Run Code Online (Sandbox Code Playgroud)

DEMO