jQuery 如果下一个 class 是特定的,则不要在 class 之后插入
jQuery do not insterAfter a class if next class is specific
我正在寻找解决问题的方法。情况如下。
我有以下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="[=24= 之后插入一些 html ]" 具有以下条件:
(i) 不应在单击 DIV 之后插入 html。
(ii) 不应将 html 插入紧接下一个 class="class1".
的任何 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)'));
});
我不明白你想达到什么目的,但为了满足你可以使用 insertBefore
的条件。
$('.connect').on("click", function (ev) {
var html = '<div class="class2">Bar Bar Bar</div>';
$(html).insertBefore($(this).parent());
});
您可以在锚元素的父级之前插入。满足这两个条件。但是我认为你应该提供更多的测试用例,以防这不是你想要的。
您可以使用 .each
循环遍历您的 symptom
divs 。然后,在此检查下一个 div 是否没有 class class1
根据这个添加你的 html 然后 div .
演示代码 :
$(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>
我正在寻找解决问题的方法。情况如下。 我有以下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="[=24= 之后插入一些 html ]" 具有以下条件: (i) 不应在单击 DIV 之后插入 html。 (ii) 不应将 html 插入紧接下一个 class="class1".
的任何 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)'));
});
我不明白你想达到什么目的,但为了满足你可以使用 insertBefore
的条件。
$('.connect').on("click", function (ev) {
var html = '<div class="class2">Bar Bar Bar</div>';
$(html).insertBefore($(this).parent());
});
您可以在锚元素的父级之前插入。满足这两个条件。但是我认为你应该提供更多的测试用例,以防这不是你想要的。
您可以使用 .each
循环遍历您的 symptom
divs 。然后,在此检查下一个 div 是否没有 class class1
根据这个添加你的 html 然后 div .
演示代码 :
$(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>