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优雅的解决方案。谢谢你们。在我的情况下,将其附加到实时点击事件是完美的。