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)
这是行不通的,因为它只是返回祖先。
感谢您的任何提示。
使用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)
| 归档时间: |
|
| 查看次数: |
4143 次 |
| 最近记录: |