2009-09-04 13 views
8

Hier ist mein HTML:Swapping div Inhalte mit jQuery

<div class="large"> 
    <img src="/images/photos/Interior.jpg" alt="The interior" style="[...]" /> 
    <div class="caption">The interior</div> 
</div> 
<div class="small"> 
    <img src="/images/photos/Bedroom.jpg" alt="Bedroom" style="[A different ...]" /> 
    <div class="caption">A bedroom</div> 
</div> 

Nach einem div.small klicken, Ich mag würde sowohl die Bilder und Bildunterschriften Container Divs zu tauschen. Der Catch ist, ich kann nicht einfach den Quellcode tauschen, da es eine Reihe von Inline-Styles gibt, die beibehalten werden müssen. Nachdem die Bilder ausgetauscht wurden, möchte ich schließlich meine benutzerdefinierte Funktion .fitToParent() auf beide anwenden.

Wie würde ich das machen?

+8

Lol Rofl usw. !! Ich habe gerade nach einer guten Möglichkeit gesucht, Div-Inhalte mit jQuery zu tauschen. Und schau, wer diese Frage beantwortet hat ... – Ropstah

Antwort

16
$(document).ready(function() { 
    $('div.small').click(function() { 
     var bigHtml = $('div.large').html(); 
     var smallHtml = $(this).html(); 

     $('div.large').html(smallHtml); 
     $('div.small').html(bigHtml); 

     //custom functions? 
    }); 
}); 
+0

Danke für die Hilfe. Wer weiß, warum ich die Zeilenumbrüche verliere, wenn ich diese in Visual Studio einfüge? – Eric

+3

Das funktioniert gut, aber Sie verlieren alle Ereignisse an die divs gebunden (wie "controlName.change()". Mit detach und append erhält die Ereignisse. Siehe http://Stackoverflow.com/a/9719297/1359088 –

0

Markup ändern wenig:

<div id="large"> 

<div id="small"> 

Und dann in der Javascript können Sie tun:

var swap = function(fromId, toId){ 
    var temp = $(toId).html(); 
    $(toId).html($(fromId).html()); 
    $(fromId).html(temp); 
} 

Offensichtlich kann es gereinigt werden, aber Sie bekommen die Idee.

+0

Ändern der ID ist keine Option, da es mehrere "div.small" gibt – Eric

1
function swapContent(){ 
    var tempContent = $("div.large").html(); 
    $("div.large").empty().html($("div.small").html()); 
    $("div.small").empty().html(tempContent); 
} 

<div class="large"> 
    <img src="/images/photos/Interior.jpg" alt="The interior" style="[...]" /> 
    <div class="caption">The interior</div> 
</div> 
<div class="small" onclick="swapContent()"> 
    <img src="/images/photos/Bedroom.jpg" alt="Bedroom" style="[A different ...]" /> 
    <div class="caption">A bedroom</div> 
</div> 

Hoffe es hilft.