Witam
Zobaczcie na kod:
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
function id(id){
return document.getElementById(id);
}
function f_move(dir, elem){
// dir:1 -> up, dir:2 -> down
box=elem.parentNode.parentNode; //div.box
sibling=0;
if (dir==1){
var sibling=box.previousSibling; // element previous to div.box
//$(sibling).before(box);
//tmp=sibling;
//$(box).before(sibling); //insert sibling before element
//$(sibling).remove();
//$(box).after(tmp);
//$(box).insertBefore(sibling);
id('structure').insertBefore(box, sibling);
}else if (dir==2){
var sibling=box.nextSibling; //next element to div.box
//$(sibling).after(box);
//tmp=sibling;
//$(box).after(sibling);
//$(sibling).remove();
//$(box).before(tmp);
//$(box).insertAfter(sibling);
id('structure').insertBefore(sibling, box);
}
return false;
}
</script>
<style type="text/css">
#structure{
padding-left: 20px;
}
div.box{
width: 200px; height: 50px;
border: 1px dotted #111; background: #F9F9E9;
margin: 4px; text-align: center;
}
div.box p{
margin: 0; padding: 1px;
}
</style>
<div id="structure">
<?php
$str='<div class="box"><p>Id: <strong>{id}</strong></p><p><a href="" onclick="return f_move(1, this);">Góra</a> <a href="" onclick="return f_move(2, this);">Dół</a> </p></div>';
for ($i=0; $i<7; $i++){
$search='{id}'; $replace='bx'.$i;
echo str_replace($search, $replace, $str); echo "\n";
}
?>
</div>
Strona wyświetla parę elementów. Jeśli użytkownik kliknie na 'Góra', to element ma się zamienić z poprzednim, jeśli kliknie 'Dół', to ma się zamienić z następnym. 4 sposoby na to znalazłem ( zakomentowane linie w kodzie JS ), w tym jak widać, używające metod z jQuery ;)
Wszystkie działają tak samo, ale nie tak jak bym chciał. Czasami wystarczy raz kliknąć, żeby elementy się zamieniły, czasami kilka razy. Chciałbym zrobić to w ten sposób, żeby elementy się zamieniły tylko po jednokrotnym kliknięciu na 'Góra'/'Dół', co teraz nie zawsze wychodzi ... Przetestujcie sami zresztą.
Jest na to jakiś sposób ?