Я не уверен, что именно вам нужно, но вот пример аккуратного обмена. Если вы настроили свой HTML так:
<h3>List One</h3>
<ul id="listOne">
<li><label for="a">A</label><input type="checkbox" id="a" name="listOne"/></li>
<li><label for="b">B</label><input type="checkbox" id="b" name="listOne"/></li>
<li><label for="c">C</label><input type="checkbox" id="c" name="listOne"/></li>
</ul>
<br/>
<h3>List Two</h3>
<ul id="listTwo">
<li><label for="d">D</label><input type="checkbox" id="d" name="listTwo" checked/></li>
</ul>
Тогда вы можете написать относительно простой jQuery, например так:
$(document).ready(function(){
$('input[type=checkbox]').live('click', function(event){
var t = $(this);
var from = 'listOne';
var to = 'listTwo';
if (!t.is(':checked')){
var swap = to;
to = from;
from = swap;
}
$('#'+to).append(t.attr('name', to).parent());
});
});
У меня это работает в jsfiddle: http://jsfiddle.net/FgWhr/5/