Cita:  
					Iniciado por derkenuke  
  Hola de nuevo:
 
Me he dado cuenta que si no se mantiene seleccionada la option (u options) se pierde el rastro de lo que hemos movido o no. Puedes cambia la función 
cambiarDePosicionOption() por lo siguiente para que se vea mejor: 
 Código PHP:
        function cambiarPosicionOption(optionA, optionB) {
        var indiceDeB = optionB.index;
        elSel.options[ optionA.index ] = new Option(optionB.text, optionB.value);
        elSel.options[ indiceDeB ] = new Option(optionA.text, optionA.value);
        elSel.options[ indiceDeB ].selected = true;
    } 
    
  Un saludo.
   si, modifique el script para que se mantubiera marcado. 
Ademas tb pasaba q si tenias seleccionada 2 opciones y llegabas al tope de arriba con la primera, la segunda podia seguir subiendo. 
Aparte el metodo de cambiar posicion lo que sacado del metodo que sube/baja, ya que asi no duplico codigo  
Asik cuelgo mis metodos modificados para el que le valgan:  
 Código PHP:
    /**
 * fCambiarPosicionOption
 * sustituir opcionA por opcionB (IE no deja directamente)
 */
function fCambiarPosicionOption(objCombo,optionA, optionB) {
        objCombo.options[ optionA.index ] = new Option(optionB.text, optionB.value);
        objCombo.options[ optionB.index ] = new Option(optionA.text, optionA.value);
}
/**
 * fSubirOption
 * Sube una posicion los elementos seleccionados
 */
function fSubirOption(objCombo){
    var opciones = objCombo.options;
    var opcionesSeleccionadas = [];
    for(var i=0, l=opciones.length; i<l; i++) {
        if( opciones[i].selected )
            opcionesSeleccionadas.push( opciones[i] );
    }
    var hayAnterior=true;
    for(var i=0, l=opcionesSeleccionadas.length; i<l && hayAnterior; i++) {
        // sustituimos cada opcion por la anterior
        var indexSel= opcionesSeleccionadas[i].index;
        hayAnterior = indexSel > 0;
        if( hayAnterior ) {
            var elAnterior = objCombo.options[ opcionesSeleccionadas[i].index - 1 ];
            fCambiarPosicionOption(objCombo,opcionesSeleccionadas[i], elAnterior);
            objCombo.options[indexSel-1].selected=true;
        }
    }
}
/**
 * fBajarOption
 * Baja una posicion los elementos seleccionados
 */
function fBajarOption(objCombo){
    var opciones = objCombo.options;
    var opcionesSeleccionadas = [];
    for(var i=opciones.length-1, l=0; i>=l; i--) {
        if( opciones[i].selected )
            opcionesSeleccionadas.push( opciones[i] );
    }
    var hayPosterior=true;
    for(var i=0, l=opcionesSeleccionadas.length; i<l && hayPosterior; i++) {
        // sustituimos cada opcion por la anterior
        var indexSel= opcionesSeleccionadas[i].index;
        hayPosterior = indexSel < opciones.length-1;
        if( hayPosterior ) {
            var elPosterior = objCombo.options[ opcionesSeleccionadas[i].index + 1 ];
            fCambiarPosicionOption(objCombo,opcionesSeleccionadas[i], elPosterior);
            objCombo.options[indexSel+1].selected=true;
        }
    }
} 
    
  
ademas es mas logico seleccionar lo que antes estaba selecionado en le metodo de subir/bajar, que e el de cambiar posicion, yauw e asi el metodo de cambiar posicion es reutilizable para cuando lo necesitemos