Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 在具有相同类且是直接同级的两个DIV之间插入新DIV_Jquery_Find_Next_Appendto - Fatal编程技术网

Jquery 在具有相同类且是直接同级的两个DIV之间插入新DIV

Jquery 在具有相同类且是直接同级的两个DIV之间插入新DIV,jquery,find,next,appendto,Jquery,Find,Next,Appendto,现在正在与这个问题斗争一段时间。我的标记简化了: <div class=row> <div class="somediv"></div> <div class="somediv2"></div> <div class="elem"></div> <div class="elem"></div> <div class="somediv3">

现在正在与这个问题斗争一段时间。我的标记简化了:

<div class=row>
    <div class="somediv"></div>
    <div class="somediv2"></div>
    <div class="elem"></div>
    <div class="elem"></div>
    <div class="somediv3"></div>
    <div class="somediv4"></div>
<div class=row>
....

....
我需要找到一种方法来选择document ready上的所有div: 1.有一门课:elem 2.他们的下一个DIV也有类名:elem。 然后我需要在它们之间插入一个新的DIV:

<div class=row>
    <div class="somediv2"></div>
    <div class="elem"></div>
    <div class="new"></div>
    <div class="elem"></div>
    <div class="somediv3"></div>
    <div class="somediv4"></div>
<div class=row> // and it goes...


$(document).ready( function () {
   if($('.elem').next().hasClass('.elem')) {
       $('<div class="new"></div>').appendTo().prev('.elem');
   } else {
   });
});

//它是这样的。。。
$(文档).ready(函数(){
if($('.elem').next().hasClass('.elem')){
$('').appendTo().prev('.elem');
}否则{
});
});
试试这个:

$(document).ready( function () {
   $('.elem + .elem').before($('<div class="new"></div>'));
});
$(文档).ready(函数(){
$('.elem+.elem')。在($('')之前;
});
它使用CSS的相邻同级选择器(
+
)。它找到一个class
.elem
的元素,另一个class
.elem
的元素紧跟在它前面,然后在它前面添加一个新的div


小提琴:我觉得你的代码很不错。难道你不需要把它包装成一个
每个
,这样它就可以在每个人身上开火吗

$(document).ready( function () {
   $('.elem').each( function() {
     if($(this).next().hasClass('.elem')) {
         $('<div class="new"></div>').appendTo().prev('.places');
     } else {}
   });
});
$(文档).ready(函数(){
$('.elem')。每个(函数(){
if($(this).next().hasClass('.elem')){
$('').appendTo().prev('.places');
}else{}
});
});

非jQuery解决方案:

var divs, str;

divs = document.getElementsByClassName( 'elem' );

[].slice.call( divs ).forEach(function ( div ) {
    str = ' ' + div.nextElementSibling.className + ' ';
    if ( str.indexOf( ' elem ' ) !== -1 ) {
        div.insertAdjacentHTML( 'afterend', ' <div class="new">X</div> ' );
    }
});
var divs = document.querySelectorAll( '.elem + .elem' );

[].slice.call( divs ).forEach(function ( div ) {
    div.insertAdjacentHTML( 'beforebegin', ' <div class="new">X</div> ' );
});

现场演示:

好的-我更喜欢你的答案!谢谢你的小提琴。我忘了提到(对不起)html是由javascript生成的。你的代码是有效的,只是为了在一个普通的页面上理解,但我想,因为生成的内容,这是不适合我的工作。当我使用click event时,我只是简单地将live()添加到函数中,在这种情况下如何做类似的事情?如果我将其附加到上述环境中的click event,它会起作用。我想您可能需要发布一个新问题以获得.live部分的答案。我认为答案会更像你的原始代码,而不像Matt优雅的解决方案。谢谢你们。在我的情况下,将其附加到实时点击事件是完美的。