2012-02-08 19 views
6

Jak mogę sklonować DIV, dołączyć go zaraz po div i nadać mu nowy identyfikator?jQuery .clone .insertAfter z nowym identyfikatorem

Mam div z klasą reflection chcę każde wystąpienie DIV, sklonowano i wprowadzono tuż po oryginał, ale z klasą reflected (bez klasy, reflection) W jaki sposób można to osiągnąć z jQuery?

Oto mój obecny skrzypce, ale to nie działa dobrze ... http://jsfiddle.net/yUgn9/

+0

@rusty, Gdzie twoja odpowiedź poszła, to było poprawne? – henryaaron

Odpowiedz

9

Przekaż funkcję do .after() i zwróć zaktualizowany klon.

$('div.reflection').after(function() { 
    return $(this).clone().toggleClass('reflection reflected'); 
}); 

DEMO:http://jsfiddle.net/PFBVX/


W starszych wersjach jQuery to zrobić ...

$('div.reflection').each(function() { 
    $(this).after($(this).clone().toggleClass('reflection reflected')); 
}); 

DEMO:http://jsfiddle.net/PFBVX/1/

+0

Niestety ... nie działa z 1.4.2 – henryaaron

+0

@ user1090389: Wtedy zrobiłbyś to samo, ale z '.each()'. Zaktualizuję. –

+2

Bóg kocham StackOverflow! Jedno wyszukiwanie, pierwszy wynik! Dzięki! – NaturalBornCamper

2

wierzę musisz .each() z nich obsługiwać je indywidualnie. To, co obecnie robi kod, polega na tym, że łapie je wszystkie i klonuje je po nich wszystkich. Zamiast tego chcesz obsłużyć każdy z nich osobno i wstawić klon po oryginale, po zmianie klas zgodnie z potrzebami.

$(document).ready(function(){ 

    $('div.reflection').each(function() { 
     var org = $(this), 
      clone = org.clone(); 

     clone.removeClass('reflection').addClass('reflected') 
      .insertAfter(org); 
    }); 

}); 
Powiązane problemy