2010-02-18 16 views
8

Tengo una tabla que se actualiza con ajax y después de actualizarla si está ordenada pero no tengo que ordenar una columna fija sino la misma que se hizo clic por última vez antes de la actualización.Jquery Tablesorter ordena la misma columna después de la actualización

function tableUpdated() { 
$(".tablesorter").trigger("update"); 
//alert($(".tablesorter").sorting); 
var sorting = [[7, 0]]; 
$("table").trigger("sorton", [sorting]); 
} 

En mi código tengo que poner mi índice de la columna seleccionada en lugar de 7

Respuesta

5

jQuery de .data() le ayudará aquí. Siempre que el usuario haga clic para ordenar una tabla, almacene las columnas en la misma tabla. Dentro de la función de clasificación, añadir lo siguiente:

$("#table").data('sorting', selectedColumn); 

Ahora el elemento con id="table" tiene una propiedad sorting con el valor de selectedColumn. En tableUpdated, puede utilizar estos datos:

function tableUpdated() { 
    $(".tablesorter").trigger("update"); 
    var sorting = [[$("#table").data('sorting'), 0]]; 
    $("#table").trigger("sorton", [sorting]); 
} 

datos de producción con una .data() puede ser aún más compleja, lo que permite añadir objetos de datos. Ver this page para más detalles.

+0

Gracias, lo intentaré ... –

+0

primero: gracias por esto. Segundo: ¿el 0 en la búsqueda de datos no lo hace de forma predeterminada a ascendente \ descendiendo (se me olvida cuál es) y no al valor seleccionado por el usuario? – javamonkey79

+0

@ javamonkey79: Suponiendo que eso es lo que es el 0, tienes razón. Este podría ser otro buen lugar para usar .data(). Guarde la dirección del ordenamiento como otra propiedad en la tabla y actualícela cuando se cambie la dirección del ordenamiento. – Aaron

0

Después de luchar con esto por un día o así encontré el datatables plugin que tiene el estado de ahorro de la caja. Espero que esto ayude a alguien más.

3

Usando su código, puede hacer algo como esto (supongamos que su identificador de tabla es # lista de la tabla) para mantener la tabla actual de clasificación:

function tableUpdated() { 
    $("#list-table").trigger("update"); 
    var sorting = $("#list-table").get(0).config.sortList; 
    $("#list-table").trigger("sorton", [sorting]); 
} 
2

que puede recogerlo en el 'sortEnd' evento en su mesa:

var lastSortList; 

$table.on('sortEnd', function(e) { 
    lastSortList = e.target.config.sortList; 
}); 
0

Aqui se puede solicitar con la misma columna y añadir uno nuevo a Clasificador

var sorting = $("table").get(0).config.sortList; 
sorting.push([2,0]); // add an element to the array 
$("table").trigger("sorton", [sorting]); 
0

Podría un poco menos sobrecarga para salvar el último tipo sólo cuando ajax comenzando así:

lastSortList=$("table")[0].config.sortList; 

Entonces recuperarlo después de la actualización de esta manera:

$("table").trigger("sorton", [lastSortList]); 

Recuerde que debe declarar la primera línea en el alcance correcto sin embargo.

Cuestiones relacionadas