【发布时间】:2014-09-06 05:34:02
【问题描述】:
我有一个关于使用 jquery 进行 dom 导航的问题。我正在尝试查找具有给定类的元素,该元素在给定元素之后的 dom 中最接近。
我有一个类似表格的结构,通过 div 创建并在 css 中设置样式。我有一个正在编辑的元素,当用户按下回车键时,我想关注以下可编辑元素。但是,它不是正在编辑的元素的兄弟。
HTML
<div class="calendarEntry">
<div when="2014,9,18" class="when">Sep 18</div>
<div class="items">
<div class="item">
<div code="ABC" class="type">ABC123</div>
<div offered="2014,9,15" class="offered dateish">Sep 15
<div class="offer editable">10</div>
<div class="sku editable">TH1</div>
<button>Publish</button>
</div>
</div>
<div class="item">
<div code="DEF" class="type">DEF321</div>
<div offered="2014,9,14" class="offered dateish">Sep 14
<div class="offer editable">10</div>
<div class="sku editable">TH2</div>
<button>Publish</button>
</div>
</div>
<div class="item">
<div code="GHI" class="type">GHI852</div>
<div offered="2014,9,12" class="offered dateish">Sep 12
<div class="offer editable">10</div>
<div class="sku editable">TH3</div>
<button>Publish</button>
</div>
</div>
</div>
</div>
注意:页面上有多个日历条目。
假设用户正在编辑 DEF312 商品的报价。当他们按回车键时,我想编辑 GHI852 的报价。我有使 div 可编辑的代码,方法是将其替换为具有offer editing 类的文本字段。如果他们正在编辑此日历条目中的最终报价,则 Enter 键应聚焦以下日历条目的第一个可编辑报价(如果有)。如果我们在列表的底部,我不想回到顶部(我认为无论如何这会使事情过于复杂)。
我坚持的一点是如何找到下一个报价(所有报价都是可编辑的)。
这是我尝试过的:
var nextOffer = $('.offer').find('.editing').next('.editable');
显然,这行不通。问题是以下可编辑的报价不是正在编辑的当前报价的同级,因此next() 对我不起作用。以下报价可能在当前日历条目中,也可能在下一个日历条目中。无论哪种方式,它都在几个 div 之外,在不同的深度。
我什至可以使用 jquery dom 遍历来做到这一点,还是我最好只是通过 javascript 强制执行它(即循环遍历所有 .editable 实例并返回 .editing 之后的那个?
【问题讨论】:
-
您是否尝试过使用
.parent()退出当前的可编辑报价并进入下一个? -
我认为你的问题是“item”的嵌套越来越深。结构不完全遵循逻辑顺序。
-
是的,尝试了 parent() 和 parents() 的各种组合。无法解决。
-
这是我的代码中的错字,我会修复它。谢谢。
标签: javascript jquery