jQuery 找不到您前面的元素,使用此标记它们位于 DOM 的不同树中。你可以像这样改变你的标记..
<li>
<a href="#" data-test="1">test</a>
<a href="#" data-test="2">test</a>
<a href="#" data-test="3">test</a>
</li>
<script>
$(document).ready(function() {
console.log( $("a[data='3']").prevAll() );
});
</script>
注意排序,倒序排序 result = [data 2, data 1]
如果这可以在像下面这样的树中工作,它应该找到7,6,5
还是7,6,1
?您会看到此命令对于在 DOM 的其他分支中遍历树不是最佳的。
<li>
<a href="#" data-test="1">test</a>
<a href="#" data-yeah="2">test</a>
<a href="#" data="3">test</a>
<a href="#" data-yeah="4">test</a>
<a href="#" data="5">test</a>
</li>
<ol id='list'>
<li><a href="#" data-test="6">test</a></li>
<li><a href="#" data-yeah="7">test</a></li>
<li><a href="#" data="8">test</a></li>
<li><a href="#" data-yeah="9">test</a></li>
<li><a href="#" data="10">test</a></li>
</ol>
最好更改标记,以便 [ data
] 在li
标签中
<ol id='list'>
<li data-test="6"><a href="#" >test</a></li>
<li data-yeah="7"><a href="#">test</a></li>
<li data="8"><a href="#" >test</a></li>
<li data-yeah="9"><a href="#">test</a></li>
<li data="10"><a href="#">test</a></li>
</ol>
所以在这个标记中,以下可以找到你想要的
console.log(
$("li[data=8]").prevAll()
);
这是li
标签造成的典型问题,它们适用于列表项,而不是主要的 DOM 结构。但无论如何,也许其他人知道更好的解决方案..
来自柏林的问候。干杯