使用 jQuery 查找最近的兄弟姐妹

Rap*_*ger 5 jquery dom siblings closest

给定以下 DOM

<ul>
     <li data-id="1">
     <li data-id="2">
     <li data-id="3">
     <li data-id="1">
</ul>
Run Code Online (Sandbox Code Playgroud)

我们需要找到与 data-id="3"最接近的<li>-Elementdata-id="1"

我们尝试了:

$('[data-id=3]').siblings('[data-id=1]').first()
Run Code Online (Sandbox Code Playgroud)

当然,它返回DOM 中的第一个,而不是最接近的

我们还尝试过:

$('[data-id=3]').closest('[data-id=1]')
Run Code Online (Sandbox Code Playgroud)

这是行不通的,因为它只是返回祖先。

感谢您的任何提示。

Amm*_*CSE 3

使用nextUntil()prevUntil()可以计算哪个方向有最近的同级,然后确定是使用next()还是prev()

var nextLength = $('[data-id="3"]').nextUntil('[data-id="1"]').length;
var prevLength = $('[data-id="3"]').prevUntil('[data-id="1"]').length;
var closestSibling;
if (nextLength > prevLength) {
  closestSibling = $('[data-id="3"]').prev('[data-id="1"]');
} else {
  closestSibling = $('[data-id="3"]').next('[data-id="1"]');
}
console.log(closestSibling.text());
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<ul>
  <li data-id="1">second closest</li>
  <li data-id="2"></li>
  <li data-id="3"></li>
  <li data-id="1">first closest</li>
</ul>
Run Code Online (Sandbox Code Playgroud)