【问题标题】:How to select the element (div) below the selected one (grid style) in jquery如何在jquery中选择所选元素(网格样式)下方的元素(div)
【发布时间】:2013-05-01 01:18:56
【问题描述】:

选择当前选中元素下方的div。

嗨!

好的,假设我们有以下 HTML 代码:

<div id="container">
   <div class="an-element selected"></div>
   <div class="another-one"></div>
   <div class="annnddd-onehere"></div>
   <div class="i-think"></div>
   <div class="you-got"></div>
   <div class="the-idea"></div>
</div>

每个 div 的宽度是固定的,但不是窗口大小。在大屏幕上,所有 6 个元素都显示在同一行上。但在较小的屏幕上,第一行包含 4 个元素,第二行包含 2 个元素。

现在假设第一个元素具有“选定”类。如何将“选定”类添加到该元素下方的元素(如果 div 确实存在)? (很明显,当前的 .selected 会被移除)

这是用于使用箭头的键盘导航系统。

一如既往地感谢您的宝贵时间;)

编辑

如果选择了第二个元素,并且用户按下了向下箭头,则会影响第六个元素。 如果选择了第三个元素,并且用户按下向下箭头,则不会发生任何事情,因为该元素下没有 div。

我在这里发现了一个显示“概念”的小动画: http://push-a-button.com/products/emucenter/

【问题讨论】:

  • 所以在较小的屏幕上,您希望有 2 个具有 selected 类的 div?
  • 你想为连续的第一个 div 添加类“selected” ?????
  • dfsq,不会删除 .selected 类。对困惑感到抱歉。 rynhe,我想从第一个“跳”到第五个(因为它在下面)
  • 那么您希望能够使用 ArrowDown/Up 键吗?
  • 是的,通过不同的 div...

标签: jquery dom jquery-selectors keyboard-navigation


【解决方案1】:

这可以使用elementFromPoint 方法来完成。这个想法是测试什么元素位于当前选中的下面:

// testPos is the position under/over the selected element
var under = document.elementFromPoint(testPos.left, testPos.top);

// If the element has class block then we can highlight it
if (under && under.className == 'block') {
    selected[0].className = 'block';
    under.className = 'block selected';
}

完整演示:http://jsfiddle.net/PMeNJ/1/

【讨论】:

  • 有趣的做法。为了好玩,我已经测试过使用“当前 eq 减去每行 eq”来计算所选块的块。但你的方法更简单。谢谢您的帮助。 +1 并接受答案。
【解决方案2】:

试试next()addClass()

$('#container div.selected').next().addClass('selected');

但是,如果您有多个选定的 div,那么您需要使用循环来获取每个选定的和 addClass。

$('#container div.selected').each(function(){
   var $nextDiv=$(this).next();
   if(!$nextDiv.hasClass('selected'))
   {
        $nextDiv.addClass('selected');
    }
});

【讨论】:

  • humm.. next() 将选择下一个 DOM 元素,也就是右边的那个。在第四个之后,它会在第五个时“下降”。当按下向下箭头时,我想直接从第一个元素转到第五个元素。 (仅当有两行时,如果所有元素都适合 1 行,它将什么都不做……因为它不存在……)-我不确定我是否可以理解哈哈
【解决方案3】:

代码如下:

var diff = window.resolution - (#container div).width()*(#container div).length)

现在计算“差异”是否是 (#container div).width() 的倍数。

如果是两个,那么它将是第 5 项...添加此处选择的类。

如果是一个,那么它将是第 6 项...添加此处选择的类。

【讨论】:

  • 谢谢 Rajiv007,我本来打算那样做的,但我想也许有一种“更简单”的方法可以做到这一点,但你证实我没有其他方法。 :) 投票。 (我会尽快接受答案)
猜你喜欢
  • 2011-01-04
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
相关资源
最近更新 更多