jQuery .swap() Plugin

.swap(index1, index2)

Description
Swaps the elements within a jQuery object.

Download the ZIP File with Source and Demo

Parameters:

  • index1: The first index of the jQuery object being swapped
  • index2: The second index of the jQuery object being swapped

Note: The first index starts at 0.

Demos

Boxes of class “box” selected with jQuery via $(“.box”) are displayed with their respective index number. Choose two indexes to swap, and then click the swap button. Click “Toggle Index 0″ to see that Index 0 will be toggled regardless of an element’s starting position, indicating the elements of the jQuery object have indeed been swapped.


*** Please note that the .swap() method does not physically swap the element position styles, only their abstract position within the jQuery object. The index-based style positioning is handled by the fakeFloat method on line 34.

Click to toggle source code

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="swap.jquery.js"></script>
<style type="text/css">
body{background-color: #FFFFFF;}
.box{width: 30px;height: 30px;border: 1px solid #000000;position: absolute; top: 10px;}
#hideToggle{margin-top: 50px;}
button{margin-top: 10px;margin-left: 10px;clear: both;float: left;width: 150px;height: 30px;}
#firstIndex{clear: both;float: left;margin-left: 10px;}
#secondIndex{float: left;margin-left: 10px;}
#box1{background-color: #FFFF00;}
#box2{background-color: #CCCCCC;}
#box3{background-color: #009999;}
#box4{background-color: #FF0000;}
</style>
<script type="text/javascript">
$(function(){
	var boxes = $(".box");

	$(boxes).each(function()
	{
		$(this).html($(this).index());
	});

	$(boxes).fakeFloat({margin: 10, offset: 20});

	$("#swapTrigger").click(function()
	{
		var index1 = $('input:radio[name=index1]:checked').val();
		var index2 = $('input:radio[name=index2]:checked').val();
		boxes = $(boxes).swap(index1,index2);

		$(boxes).fakeFloat({margin: 10, offset: 20, speed: 300}).each(function()
		{
			$(this).html($(this).getIndexOf(boxes));
		});
	});

	$("#hideToggle").toggle(function()
	{
		$(boxes[0]).hide();
		$("#swapTrigger").attr('disabled', 'disabled');
	},
	function()
	{
		$(boxes[0]).show();
		$("#swapTrigger").removeAttr('disabled');
	});
});
</script>
</head>
<body>
	<div class="box" id="box1"></div>
	<div class="box" id="box2"></div>
	<div class="box" id="box3"></div>
	<div class="box" id="box4"></div>
	<button type="button" id="hideToggle">Toggle index 0</button>
	<button type="button" id="swapTrigger">Swap</button>
	<div id="firstIndex">
	<b>Swap Index</b><br />
	<input type="radio" name="index1" value="0" />0<br />
	<input type="radio" name="index1" value="1" />1<br />
	<input type="radio" name="index1" value="2" />2<br />
	<input type="radio" name="index1" value="3" />3<br />
	</div>
	<div id="secondIndex">
	<b>With Index</b><br />
	<input type="radio" name="index2" value="0" />0<br />
	<input type="radio" name="index2" value="1" />1<br />
	<input type="radio" name="index2" value="2" />2<br />
	<input type="radio" name="index2" value="3" />3<br />
	</div>
</body>
</html>

Bugs? Comments? Leave your feedback below!



Related Posts:

About the Author:

Joseph is the lead developer of Vert Studios, a web design company located in Tyler, Tx. Follow him on Twitter! @Joe_Query.

  1. I did it simply using following code..

    element1 = $(“#element1″);
    element2 = element1.next();
    element2.insertBefore(“#element1″);

    works everywhere, if u want to swap two elements.. no effects:)

Add to the conversation: