【问题标题】:jQuery need help to navigate/highligt elements on a complex listjQuery 需要帮助来导航/突出显示复杂列表中的元素
【发布时间】:2011-09-28 23:17:25
【问题描述】:

这是我的 hmtl 列表。

<div class="bradius3 taggy-beans">
    <div class="taggy-beans-search"><input type="text" id="search-tags" class="bradiusMax" style=""></div>
    <div class="pajinate-content">
    <ul class="pajinate">
    <li class="page1" style="display: inline;">
    <ul class="filtered-tags">
    <li><a id="4e72858ccaa47ca608510000" class="bradiusMax bean" href="javascript:void(0)">hey</a>
    </li>
    </ul>
    </li>
    <li class="page1" style="display: inline;">
    <ul class="filtered-tags">
    <li>
    <a id="4e72858ccaa47ca6082d0000" class="bradiusMax bean" href="javascript:void(0)">hi</a>
    </li>
    </ul>
    </li>
    <li class="page1" style="display: inline;">
    <ul class="filtered-tags">
    <li>
    <a id="4e72858ccaa47ca6082d0000" class="bradiusMax bean" href="javascript:void(0)">jhon</a>
    </li>
    </ul>
    </li>
    </ul>
    </div>
    </div>

我的 js 脚本。

    $('#search-tags').live('keydown',function(e){
 var $prev, $next, $current = $(".pajinate a.highlight");

    if (e.which === 40 && !$current.length) {
        $(".pajinate a:first").addClass("highlight");
    } else if (e.which === 39) {
        console.log($next);
        $next = $current.next(".pajinate a");
        if ($next.length) {
            $current.removeClass("highlight");
            $next.addClass("highlight");
        }

    } else if (e.which === 37) {
        console.log($prev);
        $prev = $current.prev(".pajinate a");
        if ($prev.length) {
            $current.removeClass("highlight");
            $prev.addClass("highlight");
        }
    } else if (e.which === 38) {
        $(".pajinate a").removeClass("highlight");
    }
});

我要做的是在上面的 html 列表中通过 e.keyCode 导航,尝试突出显示 a.bean 元素,但脚本仅突出显示第一个 a.bean,然后向左或向右键不会突出显示元素

有什么建议吗?

这里是一个脚本逻辑的例子:http://jsfiddle.net/WeNdW/

【问题讨论】:

    标签: javascript jquery drop-down-menu highlighting


    【解决方案1】:

    如果您要突出显示某个元素,那么您将在 DOM 树中太深,next 无法正常工作。 next 得到下一个兄弟,而 a 没有。

    a 突出显示并设置为$current

    所以$next$prev 需要在 DOM 树上向上走几层才能到达真正的下一个 a

    因此,parent().parent().parent() 的部分在 DOM 结构上进行了适当的调整。同样,children().children().children() 返回并突出显示 a。

    $("#search-tags").live("keydown", function(e) {
        var $prev, $next, $current = $(".pajinate a.highlight");
    
        if (e.which === 40 && !$current.length) {
            $(".pajinate li:first a").addClass("highlight");
        } else if (e.which === 39) {
            $next = $current.parent().parent().parent().next("li");
            if ($next.length) {
                $current.removeClass("highlight");
                $next.children('ul').children('li').children('a').addClass("highlight");
            }
    
        } else if (e.which === 37) {
            $prev = $current.parent().parent().parent().prev("li");
            if ($prev.length) {
                $current.removeClass("highlight");
                $prev.children('ul').children('li').children('a').addClass("highlight");
            }
        } else if (e.which === 38) {
            $(".pajinate a.highlight").removeClass("highlight");
        }
    });
    

    fiddle here

    【讨论】:

    • ops ,但我也用 $(document).bind('keydown',function(e){} 测试了我的代码,但没有用左右键突出显示:(
    • 当我在按下 keydown 后玩小提琴(在 firefox 6 中,fwiw)时,第一个元素被突出显示,然后我可以使用左右(不向下)移动元素。一旦我键入,什么都不会突出显示,所以左右没有效果。这是您正在寻找的功能吗?
    • 演示为什么会突出显示 li 并且上面的代码试图突出显示 a 的任何原因?如果你把上面的代码改成看起来更像演示,没问题...
    • 演示是针对不同类型的 html 列表,我的意思是不那么复杂的列表,而且我想在我的代码中突出显示 而不是
    • ,该示例只是为了让您理解更好地将我想做的事情的逻辑绑定到 而不是
  • 然后只需向prevnextcurrent 添加一个父/子
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签