6

しばらくこれに苦労しています。私のマークアップは単純化されました:

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

3 に答える 3

14

これを試して:

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

CSSの隣接する兄弟セレクター(+)を使用しています。クラスを持つ要素とその直前にクラス.elemを持つ別の要素を見つけ、その前に新しいdivを追加します。.elem

フィドル: http: //jsfiddle.net/4r2k4/

于 2011-09-14T14:38:00.623 に答える
3

非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/

「しかし、シメ、これは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/

于 2011-09-14T14:47:54.940 に答える
2

あなたのコードは私にはかなりよく見えます。それぞれに火がつくように包むだけでいいのではないですeachか?

$(document).ready( function () {
   $('.elem').each( function() {
     if($(this).next().hasClass('.elem')) {
         $('<div class="new"></div>').appendTo().prev('.places');
     } else {}
   });
});
于 2011-09-14T14:39:02.183 に答える