使用jquery在dom的其余部分中查找特定元素之后的第一个匹配项

时间:2016-01-13 10:50:40

标签: javascript jquery html dom

嗨,我必须找到" findme"在特定div之后的dom结构中的div 并使用一个Jquery在div之后找到第一个实例。 以下可能是dom结构:

ex1:
<div class="abc"></div>
<div class="findme"></div>

ex2:
<div class="abc"></div>

 <div>
   <div class="findme"></div>
</div>

 ex3:
 <div>
   <div class="abc"></div>
 </div>
 <div>
   <div class="findme"></div>
</div>

 ex4:
 <div>
   <div class="abc"></div>
 </div>
  <div class="findme"></div>
上面是dom结构的一些例子,其中我想找到&#34; findme&#34;第一个div&#34; abc&#34; div使用jquery 我尝试使用after(),closest().nextAll().first() 但我没有得到与上述所有示例匹配的查询。 所以任何人都可以帮助我找到第一个元素(&#34; finme&#34;)&#34; abc&#34; div

我想找到下一个&#34; findme&#34;在&#34; abc&#34;之后完成dom div和第一次出现&#34; abc&#34;以上div是dom可以的一些例子

1 个答案:

答案 0 :(得分:1)

我能找到让所有情况都适用的唯一方法是使用过滤器顺序遍历整个DOM:

var foundAbc;
$('*').filter(function() {
  if ($(this).hasClass('abc')) {
    foundAbc = true;
  } else {
    if (foundAbc && $(this).hasClass('findme')) {
      foundAbc = false;
      return true;
    }
  }
  return false;
}).css('color','red');

JSFiddle: https://jsfiddle.net/TrueBlueAussie/LnLf79od/2/

如果要使其可重用,可以将此行为包装在jQuery扩展方法中。

$.findNext = function(selector1, selector2) {
  var foundAbc;
  return $('*').filter(function() {
    if ($(this).is(selector1)) {
      foundAbc = true;
    } else {
      if (foundAbc && $(this).is(selector2)) {
        foundAbc = false;
        return true;
      }
    }
    return false;
  });
}

并使用如下:

$.findNext('.abc', '.findme').css('color', 'red');

JSFiddle: https://jsfiddle.net/TrueBlueAussie/LnLf79od/3/