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

发布于 2024-12-04 16:41:33 字数 984 浏览 0 评论 0原文

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

<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>
....

我需要找到一种方法来选择文档上的所有 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 {
   });
});

Struggling with this one for a while now. My markup simplified:

<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>
....

I need to find a way to select all DIVs on document ready that:
1. has a class: elem
2. their next DIV also has the class name: elem.
Then I need to insert a new DIV between them:

<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 {
   });
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

枫以 2024-12-11 16:41:34

试试这个:

$(document).ready( function () {
   $('.elem + .elem').before($('<div class="new"></div>'));
});

它使用 CSS 的相邻同级选择器 (+)。它找到一个类 .elem 的元素,以及紧邻其前面的另一个类 .elem 的元素,然后在其前面添加一个新的 div。

小提琴:http://jsfiddle.net/4r2k4/

Try this:

$(document).ready( function () {
   $('.elem + .elem').before($('<div class="new"></div>'));
});

It's using CSS's adjacent sibling selector (+). It finds an element with class .elem with another element with class .elem immediately preceding it, then adds a new div before it.

Fiddle: http://jsfiddle.net/4r2k4/

肤浅与狂妄 2024-12-11 16:41:34

非 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> ' );
    }
});

现场演示: http://jsfiddle.net/2MfgB/ 2/

“但是 Šime,这在 IE8 中不起作用...” :P


更新:
替代解决方案:

var divs = document.querySelectorAll( '.elem + .elem' );

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

现场演示: http://jsfiddle.net/2MfgB/3/< /a>

The non-jQuery solution:

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> ' );
    }
});

Live demo: http://jsfiddle.net/2MfgB/2/

"But Šime, this doesn't work in IE8..." :P


Update:
Alternative solution:

var divs = document.querySelectorAll( '.elem + .elem' );

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

Live demo: http://jsfiddle.net/2MfgB/3/

归途 2024-12-11 16:41:34

你的代码对我来说看起来很不错。难道你不需要把它包装在一个 each 中,这样它就可以在每一个上触发吗?

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

Your code looks pretty good to me. Don't you just need to wrap it in a each so that it fires on each one?

$(document).ready( function () {
   $('.elem').each( function() {
     if($(this).next().hasClass('.elem')) {
         $('<div class="new"></div>').appendTo().prev('.places');
     } else {}
   });
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文