jQuery不insterAfter一个类如果下一个类是特定的

hgqdbh6s  于 2023-05-22  发布在  jQuery
关注(0)|答案(2)|浏览(102)

我正在寻找解决我的问题的方法。情况如下。我有以下div

<div class="group">
    <div class="A1_B1 symptom">Bla Bla Bla</div>
    <div class="class1 symptom">Bla Bla Bla</div>
    <div class="A1_B1 symptom">Foo Foo Foo</div>
    <div class="A1_B3 symptom">Con Con Con</div>
    <div class="A1_B1 symptom"><a href="#" class="connect">Click Me</a></div>
</div>

当我点击DIV class=“A1_B1”时,我必须在class=“A1_B1”后插入一些html,并满足以下条件:(i)不应在点击的DIV之后插入html。(ii)html不应插入在任何具有直接下一个class=“class 1”的DIV之后。
基于给定的条件,html应该像这样出现-

<div class="group">
    <div class="A1_B1 symptom">Bla Bla Bla</div>
    <div class="class1 symptom">Bla Bla Bla</div>
    <div class="A1_B1 symptom">Foo Foo Foo</div>
    <div class='class2'>Bar Bar Bar</div>
    <div class="A1_B3 symptom">Con Con Con</div>
    <div class="A1_B1 symptom"><a href="#" class="connect">Click Me</a></div>
</div>

……这是我写的,不起作用。谁能帮我解决这个问题。先谢谢你了。

$(document).on("click", ".connect", function (ev) {
var thisClass = $(this).parents('div.symptom').attr('class');
var html = "<div class='class2'>Bar Bar Bar</div>";
 $(html).insertAfter("A1_B1":not("."+thisClass).next('div:not(.class1)'));
});
h43kikqp

h43kikqp1#

你可以使用.each循环来遍历你的symptom div。然后,在这个循环中检查下一个div是否没有类class1,然后在这个div后面添加你的html。

演示代码

$(document).on("click", ".connect", function(ev) {
  var selector = $(this).closest(".group")
  var not_to_compare = $(this).parent();
  //loop through all divs ..
  selector.find(".A1_B1").not(not_to_compare).each(function() {
    //if neext class is not class1
    if (!$(this).next().hasClass("class1")) {
      var html = "<div class='class2'>Bar Bar Bar</div>";
      $(html).insertAfter($(this)) //add there
    }
  })
});
.class2 {
  color: red
}

.class1 {
  color: blue
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<div class="group">
  <div class="A1_B1 symptom">Bla Bla Bla</div>
  <div class="class1 symptom">Bla Bla Bla</div>
  <div class="A1_B1 symptom">Foo Foo Foo</div>
  <div class="A1_B3 symptom">Con Con Con</div>
  <div class="A1_B1 symptom"><a href="#" class="connect">Click Me</a></div>
</div>
laawzig2

laawzig22#

我不明白你想达到什么目的,但是为了匹配条件,你可以使用insertBefore

$('.connect').on("click", function (ev) {
  var html = '<div class="class2">Bar Bar Bar</div>';
  $(html).insertBefore($(this).parent());
});

可以在锚元素的父元素之前插入。满足这两个条件。然而,我认为你应该提供更多的测试用例,以防这不是你正在寻找的。

相关问题