javascript - 在给定元素之后查找实例

标签 javascript jquery

我有一个关于 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 的文本字段。 .如果他们正在编辑此日历条目中的最终报价,则回车键应聚焦以下日历条目的第一个可编辑报价(如果有的话)。如果我们位于列表的底部,我不想回到顶部(我认为这无论如何都会使事情过于复杂)。

我遇到的问题是如何找到下一个报价(所有报价都是可编辑的)。

这是我尝试过的:

var nextOffer = $('.offer').find('.editing').next('.editable');

显然,这是行不通的。问题是以下可编辑商品不是当前正在编辑的商品的同级商品,因此 next()对我不起作用。以下报价可能在当前日历条目中,也可能在下一个日历条目中。无论哪种方式,它都相距几个 div,深度不同。

我什至可以使用 jquery dom 遍历来做到这一点,还是我最好只是通过 javascript 强制执行它(即循环遍历所有 .editable 实例并返回 .editing 之后的实例?

最佳答案

添加“编辑”类来模拟输入:

<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 editing">TH2</div>
            <button>Publish</button>
        </div>
</div>

你可以这样做:

    function findEditable(currentItem) {

        var nextEditable = undefined,
            selectors = [".item", ".calendarEntry"];

        $.each(selectors , function (idx, selector) {

            var ref = currentItem.closest(selector);

            nextEditable = ref.parent()
                .children("div:gt(" + ref.index() + ")")
                .find(".offer.editable")
                .first();

            return nextEditable.length === 0;
        })


        return nextEditable;

    }

    findEditable($(".editing")).css({
        color: 'red'
    });

jsfiddle demo

关于javascript - 在给定元素之后查找实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25692132/

相关文章:

javascript - highcharts IE8重绘图表问题

javascript - 谷歌地图标记 API 标记的标题

javascript - 必须保持大写锁定以提醒 unicode 字符

javascript - 在 Brunch 正则表达式中排除文件

javascript - Javascript 减少值和退出循环的问题

javascript - Rails - jQuery 不适用于 Heroku 的生产环境

jquery - 触发一个以 name 作为变量名的函数

jquery - 测试 jQuery 可选择 capybara 或 selenium (ctrl + click)

javascript - HTML 文本消息

javascript - 多日期选择器 : Disable dates from a list