Поменять местами два <div>
Доброго времени суток!
Ребята, подскажите новичку, пожалуйста. Задание: Есть 3 дива. Кликаем на любой из них, скажем первый. Затем, кликаем на любой другой, скажем 2ой или 3ий. После клика на второй див, они должны поменяться местами с первым кликнутым. Я написал только код самих дивов и сделал их выделяемыми, а вот именно с переменой местами - даже нет идей. Прошу помощи! :) Вот код: Код:
<html> |
:) jQuery пойдёт ?
|
Bay,
Вариант ...
<!DOCTYPE HTML>
<html>
<head>
<style>
#Div1{
position: absolute; /* Абсолютное позиционирование */
top: 50px;
height: 50px; /* Высота блока */
width: 100px; /* Ширина блока */
padding: 7px; /* Поля вокруг текста */
outline-color: red;
}
#Div2{
position: absolute; /* Абсолютное позиционирование */
left: 160px; /* Положение элемента от левого края */
top: 50px;
height: 50px; /* Высота блока */
width: 150px; /* Ширина блока */
padding: 7px; /* Поля вокруг текста */
outline-color: red;
}
#Div3{
position: absolute; /* Абсолютное позиционирование */
left: 380px; /* Положение элемента от левого края */
top: 50px;
height: 50px; /* Высота блока */
width: 150px; /* Ширина блока */
outline-color: red;
padding: 7px; /* Поля вокруг текста */
}
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div tabindex="1" id="Div1">Div1</div>
<div tabindex="2" id="Div2">Div2</div>
<div tabindex="3" id="Div3">Div3</div>
<script language="JavaScript" type="text/javascript">
var css , div;
$('div').click(function (e) {
if (css) {div.css($(this).css(["left", "top"]));$(this).css(css); css = null}
else {css = $(this).css(["left", "top"]); div = $(this)}
});
</script>
</body>
</html>
|
мон через replaceWith
|
Спасибо большое ребят) Я так понимаю, то что Рони написал это JQuery?
|
Цитата:
|
лучше стили, отвечающие за расположение, вынести в классы, например .place1, .place2 .. и просто менять у div'ов эти классы.
Или, сделать ячейки для div'ов, и через element.insertBefore() по-настоящему перемещать элементы. Причем оба варианта легко решаются без всяких jQuery. |
А обязательно использовать абсолютное позиционирование? Чем дефолтный flow не угодил?
|
<!DOCTYPE HTML>
<html>
<head>
<style>
div[id^="Div"]{
height: 50px; /* Высота блока */
width: 100px; /* Ширина блока */
padding: 7px; /* Поля вокруг текста */
border:solid 1px;
margin:7px;
}
div.change {
border:dotted 1px;
}
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div class="Wrp">
<div tabindex="1" id="Div1" style="border-color:red">Div1</div>
<div tabindex="2" id="Div2" style="border-color:blue">Div2</div>
<div tabindex="3" id="Div3" style="border-color:green">Div3</div>
</div>
<script language="JavaScript" type="text/javascript">
$(document).ready(function(){
$('.Wrp').on('click','div[id^="Div"]',function () {
var a = $('.Wrp').find('.change');
if( a.get(0)===$(this).get(0)){a.removeClass('change');return false;}
$(this).addClass('change');
if(a.length>=1) {
var b = $(this).clone();
var c = a.clone();
a.replaceWith(b);
$(this).replaceWith(c);
$('div[id^="Div"]').removeClass('change');
}
});
});
</script>
</body>
</html>
|
Bay, а зачем там tabindex? Во-первых навигация получается запутанной, когда дивы перетасованы, во-вторых, нужно тогда и обработчик onkeydown устанавливать, чтоб обрабататывать нажатие клавиш.
|
А тупо поместить все три div'а в один и делать его сборным через innerHTML — не вариант?
|
Цитата:
|
| Часовой пояс GMT +3, время: 20:47. |