【问题标题】:Find the first match after the particular element in rest of dom using jquery使用 jquery 在 dom 的其余部分中查找特定元素之后的第一个匹配项
【发布时间】:2016-01-13 10:50:40
【问题描述】:

嗨,我必须在特定 div 之后在 dom 结构中找到“findme”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 结构的一些示例,我想在其中使用 jquery 在“abc”div 之后首先找到“findme”div 我尝试使用after(),closest().nextAll().first() 但我没有得到与所有示例匹配的查询。 所以请任何人都可以帮我在“abc”div之后找到div第一个元素(“finme”)

我想在 "abc" div 之后的完整 dom 中找到下一个 "findme" div,上面的 "abc" div 之后第一次出现是 dom 可以是的一些示例

【问题讨论】:

  • 这不清楚你在期待什么,我没有看到任何逻辑。为什么例如在 ex3 中,findme 的父级不应该是匹配的???
  • 更正了下面缺少的检查,并用你提到的所有情况对其进行了测试。再试一次,看看这次是否能让你充满幸福:)

标签: javascript jquery html dom


【解决方案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/

【讨论】:

  • 如果我删除了所有的 abc 标签,那么所有的 findme div 也会变成红色
  • 如果 abc div 存在则只找到下一个 findme div 第一次出现并使其变为红色
  • @pareshm:你的例子中没有,所以错过了。这是一个微不足道的错误(现已修复)。不值得投反对票,但这个网站充满了匿名的“天才”,降低了这个地方的基调:)
  • @pareshm:你为什么问我?我没有对你投反对票。我认为这是一个很好的问题。我现在就投票。
  • 又一次盲目否决对已接受的工作答案。又一个懦夫。典型的:)
猜你喜欢
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2019-10-27
  • 2012-12-12
  • 2012-09-21
  • 1970-01-01
相关资源
最近更新 更多