2012-06-18 4 views
2

Я получил пустой Div называется Target:Как я могу обменять эти 2 div?

<div id="target"></div> 

и DIV называется список:

<div id="list"> 
    <ul> 
     <li><img id="1" src=".." /></li> 
     <li><img id="2" src=".." /></li> 
     <li><img id="3" src=".." /></li> 
    </ul> 
</div> 

То, что я хочу, по клику пользователя, получить IMG в сНу цели, и отрегулировать его размер к чему-то большему. Я могу сделать это легко.
Проблемы возникают, если пользователь нажимает на другой div или другую кнопку (стрелка или следующая кнопка в другом месте). Я хочу, чтобы 1-й div возвращался на свое место и заменялся новым (или следующим в списке , или 1-й, если его последний div, который находится на дисплее).
Я пробовал пару способов, но мой jQuery еще недостаточно хорош.

(прежде чем кто-спросить, все местные, не на стороне сервера, если это меняет что-нибудь)

ответ

3

Я не уверен вообще, если это лучший способ или даже эффективный способ сделать это, но он, кажется, делает то, что вам нужно.

DEMO: Using cloning

$("ul li img").on("click", function() { 
    var currentImage = $(this); 
    var hiddenImage = $("ul li img[hidden='hidden']"); 

    $("#target").html(""); 
    currentImage.clone().appendTo('#target'); 

    hiddenImage.removeAttr("hidden"); 
    currentImage.attr("hidden", "hidden"); 
});​ 

Согласно комментариям некоторых элементов может быть видео файлы. Вместо того, чтобы использовать clone(), вы можете перемещать элементы и оставлять место за спиной.

DEMO: Using a place-holder

$("ul li img").on("click", function() { 
    var currentImage = $(this); 
    var lastImage = $("#target img"); 
    var placeHolder = $("#last-image-position"); 

    lastImage.insertBefore("#last-image-position"); 
    $("#last-image-position").remove(); 

    $("<div id='last-image-position'><div>").insertBefore(currentImage); 

    currentImage.appendTo('#target'); 
});​ 

Редактировать
Обновленные демки с реальными изображениями.

+0

гул ... мог работать. только 1 вопрос, когда вы очищаете целевой div, клонированное изображение, которое находится в нем, полностью исчезает из памяти тоже? (в списке также будут ролики, для демонстрационного веб-сайта моего друга и он занимается рекламой, фильмами и видеомонтажом для бизнеса, и я не хочу, чтобы галерея стала вялой, если просматривалось слишком много видео) –

+0

@ThierrySavardSaucier: Смотрите отредактируйте для альтернативы, вместо этого используйте место-держатель. – Nope

+0

пытаясь заставить вашу демонстрацию работать, как только я ее получу, я скажу вам –

2

Может быть, вы не имел в виду это:

$('#target').replaceWith($('#list')); 
+0

++ 1 ИННИТ bruv! также! –

+0

Извините, что я редактировал свой пост, я все время ударил по рефлектору –

+1

@ThierrySavardSaucier. Первая ревизия хотя бы я, хотя я понял, теперь я слепой ... – gdoron

3

работает демо обменивать содержание сНа: http://jsfiddle.net/BKNjB/2/

Пожалуйста, дайте мне знать, если я не права. :)

Поведение - будет 2 оповещения before и after, отдых ниже плохой смысл.

Или может быть это: http://jsfiddle.net/vJTyf/6/или свопа таких изображений что-то поменять местами каждый раз изображение, которое вы будете нажать на изображение: http://jsfiddle.net/vJTyf/9/ (да, вы могли бы сделать это более аккуратным образом :)

кода

$(document).ready(function() { 
    alert(' Before swap HTML in target is :==> ' + $('#target').html()); 

     var targetHtml = $('#target').html(); 
     var listHtml = $('#list').html(); 

     $('#target').html(listHtml); 
     $('#list').html(targetHtml); 

    alert(' After swap HTML in target is :==> ' + $('#target').html()); 

});​ 
+0

Я не думаю, что OP хочет поменять полный контент div. Я считаю, что OP только хочет добавить выбранный образ в целевой div и при щелчке другого изображения, заменяющего одно в целевом div новым, но также помещая последний выбранный обратно в свое прежнее место в списке. Что-то вроде того. – Nope

+0

@ FrançoisWahl lol hmm (Buzzinga - теперь я смущен): P OP вы можете прочитать эти комментарии и просветить нас, бедное существо, какое-то замешательство? <от вашего последнего редактирования вопрос не имеет смысла человек) :)) ** Но ** вы можете использовать те же функции для обмена изображениями. перед «div», пожалуйста, дайте понять, Чейриос! –

+0

@Tats_innit думает об этом как о галерее изображений.Я получил список с изображениями в них, и когда пользователь нажимает один, это изображение переходит в целевой div. когда пользователь нажимает на другое изображение, первый возвращается к списку, а новое изображение переходит в целевой div. –

1

Может быть, вы хотите, чтобы это

$(function(){ 
    $('#list li').on('click', 'img', function(e){ 
     var img=$(this); 
     $('#target').html(img.clone()) .width(img.width()).height(img.height()); 
    }); 

    $('#target').on('click', function(e){ 
     $(this).html('').prop('title', '').width(200).height(200); // original size 
    }) 
    .on('mouseenter', function(e){ 
     if($(this).html()!='') $(this).prop('title', 'Click to clear'); 
    }) 
    .on('mouseleave', function(e){ 
     $(this).prop('title', ''); 
    });    
}); 

DEMO.

Update: (что вы просили)

$(function(){ 
    $('#list li').on('click', 'img', function(e){ 
     if($('#target').html()!='') 
     { 
      $('#list ul li:empty').html($('#target').html()); 
     } 
     var img=$(this); 
     $('#target').html(img).width(img.width()).height(img.height()); 
    }); 

    $('#target').on('click', function(e){ 
     $('#list ul li:empty').html($('#target').html()); 
     $(this).html('').prop('title', '').width(200).height(200); 
    }) 
    .on('mouseenter', function(e){ 
     if($(this).html()!='') $(this).prop('title', 'Click to clear'); 
    }) 
    .on('mouseleave', function(e){ 
     $(this).prop('title', ''); 
    });    
}); 

DEMO.

+0

Heera, tx, это может сработать, но я хочу, чтобы изображение исчезло из списка после его нажатия и попадания в целевой div , Кстати, можете ли вы указать мне на документ или информацию о том, как работает файл .on («click»)? Я никогда не видел этого в школе, и я вижу много перетаскивания с использованием этих методов вместо .click (function() {}); –

+1

Вот документ http://api.jquery.com/on/ –

+1

tx alot, я прочитаю это сегодня вечером на работе во время простоя –

Смежные вопросы