2011-09-14 22 views
6

Şu an bununla mücadele etmek. Benim biçimlendirme basitleştirilmiş: elem 2. sonraki DIV da sınıf adı vardır: elem 1. Bir sınıfa sahip:Aynı sınıfa sahip olan ve hemen kardeşi olan iki DIV arasında yeni DIV ekle

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

O hazır dokümandaki tüm DIV'leri seçmek için bir yol bulmalıyız. Sonra aralarında yeni bir DIV eklemek gerekir:

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

cevap

13

bu deneyin:

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

Bu BB'nin komşu kardeş seçicisi (+) kullanıyor. Önceden .elem sınıfı olan bir eleman ile .elem sınıfında bir eleman bulur ve bundan önce yeni bir div ekler.

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

+0

tamam - Ben benimkinden daha iyi cevap gibi! http://jsfiddle.net/mrtsherman/kvg8N/1/ – mrtsherman

+0

Bilmeceler için teşekkürler. Html'nin javascript tarafından üretildiğini (özür dilerim) bahsetmeyi unuttum. Kodlarınız çalışıyor ve sadece normal bir sayfada anlıyor, ancak sanırım oluşturulan içerik yüzünden bu benim için çalışmıyor. Tıklama etkinliğini kullandığımda, işleve yalnızca live() öğesini eklerim, bu durumda benzer bir işlemi nasıl yapabilirim? – elbatron

+0

Yukarıda belirtilen ortamdaki bir tıklama etkinliğine iliştirdiğimde çalışıyorum. – elbatron

2

Kodunuz bana oldukça iyi görünüyor. Her birine bir each içinde sarmanız gerekmiyor mu?

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

olmayan jQuery çözüm:

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

Canlı tanıtım:http://jsfiddle.net/2MfgB/2/

:P

"Ama Šime, bu ... IE8 çalışmıyor"

Güncelleme:
Alternatif çözüm:

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

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

Canlı tanıtım:http://jsfiddle.net/2MfgB/3/

+0

JS sürümü için teşekkürler. – elbatron

İlgili konular