【问题标题】:How to get the closest or previous object independent of the structure of the document with jQuery?如何使用jQuery获取独立于文档结构的最近或上一个对象?
【发布时间】:2012-10-20 12:11:24
【问题描述】:

示例 1:

<ul>
   <li id="o1" class="elem">foo1</li>
   <li id="o2" class="elem">foo2</li>
   <li id="o3" class="elem">foo3</li>
</ul>

**$('#o2').exactly_previous('.elem') ----> returns #o1**

示例 2:

<ul>
   <li id="o1" class="elem">foo1
      <ul>
         <li id="o11" class="elem"></li>
      </ul>
   </li>
   <li id="o2" class="elem">foo2</li>
   <li id="o3" class="elem">foo3</li>
</ul>

**$('#o2').exactly_previous('.elem') ----> returns #o11
$('#o11').exactly_previous('.elem') ----> returns #o1**

示例 3:

<ul>
   <li id="o1" class="elem">fooX</li>
</ul>
<ul>
   <li id="o2" class="elem">fooX</li>
</ul>

**$('#o2').exactly_previous('.elem') ----> returns #o1**

示例 4:

<a id="o1" class="elem">fooX</a>
<ul>
   <li id="o2" class="elem">fooX</li>
</ul>

**$('#o2').exactly_previous('.elem') ----> returns #o1**

希望你能理解我的问题!谢谢。

【问题讨论】:

  • 如果你不能用简单的逻辑来解释它,那么它可能无法编码。在倒数第二个示例中,您想要元素的父兄弟姐妹的孩子,在最后一个您想要父兄弟姐妹本身。在倒数第三个中,您上升一个父母,下降三个孩子。你如何封装它的逻辑?
  • @RobG 哈哈,我很想知道这到底是用来做什么的......
  • +1 因为对多个测试用例非常具体。

标签: javascript jquery ajax json xhtml


【解决方案1】:

试试这个

  $('#o2').parent().find('li').slice($('#o2').index() -1,$('#o2').index())

demo

【讨论】:

    【解决方案2】:

    类似这样的:

    function exactly_previous($this, selector)
    {
        var $all = $(selector);
        return $all.eq($all.index($this)-1);
    }
    

    测试:

    将其转换为 jQuery 插件留给读者作为练习。

    【讨论】:

    • @Triptych 好眼力,在添加测试时已修复,但没能点击“保存”
    • @RobG 也许吧,但我不这么认为。我的解决方案适用于所有 OP 的示例。
    • 我错过了关于元素的课程。因此 OP 想要获取由选择器创建的数组中的前一个元素。像“previousSelected”这样的名字似乎更合适。
    【解决方案3】:

    为什么不看看 jQuery .closest() API。可能有你需要的东西。

    另外,看看.find() API,它可能有助于遍历 DOM 对象。

    【讨论】:

    • 虽然 closest 很接近(哈哈,没有双关语),但这不会找到嵌套的先前元素 - 就像 OP 的示例:$('#o2').exactly_previous('.elem') ----&gt; returns #o11
    • 哈哈,好吧,希望op可以更好地制定。
    猜你喜欢
    • 2013-04-23
    • 2019-07-12
    • 2011-12-18
    • 1970-01-01
    • 2018-07-22
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多