如何获取特定类的最近/最近元素

时间:2015-02-14 20:28:43

标签: javascript jquery html

我正在尝试获取特定元素的最近/最近的类。

我怎样才能让它发挥作用?我目前正在尝试使用.closest。

HTML

<div class="test">.test</div>    <!-- Not this -->
<div>
   <div class="test">.test</div> <!-- That's the one I need to grab -->
</div>
<div id="test"></div>            <!-- This is the reference element -->
<div class="another"></div>
<div class="another"></div>
<div class="test">.test</div>

JS

var test = $('#test2').closest('.test');
console.log(test);

如果最接近正确的方法,我怎样才能真正抓住最接近的测试&#39;类?

我也尝试过parentUntil()。

实际上,如果这有用,在我的用例中,我总是需要特定类的最近的PARENT元素,无论该父元素是否在另一个元素内,就像在这个HTML示例中一样。

3 个答案:

答案 0 :(得分:2)

如果我理解正确,那么您正在寻找在HTML源顺序中出现在特定元素之前的最近元素(并且您不知道/无法更改HTML结构)。最简单的解决方案是:

jQuery()个集合按元素在DOM中出现的顺序排序(除非文档另有说明)。所以我们有:

$("#test, .test")
// [div.test, div.test, div#test, div.test]
//            ^         ^
//            |         +---- reference element
//            +-------------- nearest element before it
//
// notice that the elements are sorted in the order they appear in HTML

只需将其与jQuery.index()结合使用:

$(function() {
  var $ref = $("#test");
  var $col = $(".test").add($ref);
  var index = $col.index($ref);
  $col.eq(index - 1).css("background-color", "orange");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<div class="test">.test</div>   <!-- Not this -->
<div>
  <div class="test">.test</div> <!-- That's the one I need to grab -->
</div>
<div id="test"></div>           <!-- This is the reference element -->
<div class="another"></div>
<div class="another"></div>
<div class="test">.test</div>

答案 1 :(得分:0)

不确定,为什么你的HTML结构如此,但这应该选择你需要的div:

$('.test',$('#test2').prev('div')).text() // find a div with class test, contained within div that lies previous to #test2

答案 2 :(得分:0)

最近搜索DOM树中的父元素。对于兄弟姐妹,你不能轻易地获得最近的,但如果你知道方向上/下你可以选择.nextAll('。test:first')和prevAll('。test:first')。