2008-09-17 46 views
10

¿Alguna vez quisiste tener una tabla ordenable de arrastrar y soltar HTML en la que pudieras ordenar tanto las filas como las columnas? Sé que es algo por lo que moriría. Hay muchas listas ordenables dando vueltas, pero encontrar una tabla ordenable parece ser imposible de encontrar.Tablas ordenables de arrastrar y soltar HTML

Sé que puede acercarse bastante con las herramientas que script.aculo.us proporciona, pero me encontré con algunos problemas de navegador cruzado con ellos.

Respuesta

4

He usado dhtmlxGrid en el pasado. Entre otras cosas, admite filas/columnas de arrastrar y soltar, clasificación del lado del cliente (cadena, entero, fecha, personalizado) y compatibilidad con varios navegadores.

Respuesta al comentario: No, no se encontró nada mejor, acaba de pasar de ese proyecto. :-)

+0

Lo usaste en el pasado ... ¿Eso significa que encontraste algo mejor;) Pasé un tiempo investigando y parece ser todo lo que quería. ¡Gracias por la ayuda! – JHollanti

0

¿Qué tal sorttable? Eso parece ajustarse muy bien a sus necesidades.

Es bastante fácil de usar - cargue el archivo Javascript clasificable, luego, para cada tabla que desee que se pueda ordenar, aplique class = "sortable" a la etiqueta < >.

Entenderá inmediatamente cómo ordenar la mayoría de los tipos de datos, pero si hay algo que no es así, puede agregar una clave de clasificación personalizada para indicarle cómo ordenar. La documentación lo explica todo bastante bien.

+0

Excepto que no hay arrastre ni caídas. Necesito poder ordenar la tabla de la manera que quiero fila por fila, y no por alguna regla. – JHollanti

+0

Ah, lo siento, mi mal. –

5

Recomiendo Sortables en jQuery. Puede usarlo en elementos de la lista o casi cualquier cosa, incluidas las tablas.

jQuery es muy compatible con varios navegadores y lo recomiendo todo el tiempo.

+1

No pude obtener el ordenamiento jQuery para trabajar en una tabla. Simplemente arrastra toda la mesa o células individuales. Pero no hay arrastre basado en filas. – JHollanti

0

Si no le molesta Java, hay una biblioteca muy útil para GWT llamada GWT-DND eche un vistazo a la demostración en línea para ver qué tan poderosa es.

+0

No me importa Java pero alguien más podría :) Pero en serio, Java se siente un poco pesado. – JHollanti

+4

Usar Java porque quiere una tabla ordenable parece usar un mazo para martillar un tornillo. –

1

La mayoría de los marcos (Yui, MooTools, jQuery, Prototype/Scriptaculous, etc.) tienen una función de lista ordenable. Investigue un poco sobre cada uno y elija el que más se ajuste a sus necesidades.

18

He usado el plugin ordenable de jQuery UI con buenos resultados. De marcado similar a esto:

y
<table id="myTable"> 
<thead> 
<tr><th>ID</th><th>Name</th><th>Details</th></tr> 
</thead> 
<tbody class="sort"> 
<tr id="1"><td>1</td><td>Name1</td><td>Details1</td></tr> 
<tr id="2"><td>2</td><td>Name1</td><td>Details2</td></tr> 
<tr id="3"><td>3</td><td>Name1</td><td>Details3</td></tr> 
<tr id="4"><td>4</td><td>Name1</td><td>Details4</td></tr> 
</tbody> 
</table> 

luego en las javascript

$('.sort').sortable({ 
    cursor: 'move', 
    axis: 'y', 
    update: function(e, ui) { 
     href = '/myReorderFunctionURL/'; 
     $(this).sortable("refresh"); 
     sorted = $(this).sortable("serialize", 'id'); 
     $.ajax({ 
      type: 'POST', 
      url: href, 
      data: sorted, 
      success: function(msg) { 
       //do something with the sorted data 
      } 
     }); 
    } 
}); 

Este publica una versión serializada de los ID de los ítems a la URL dada. Esta función (PHP en mi caso) luego actualiza las órdenes de los artículos en la base de datos.

+0

En caso de que ayude a otra persona - Tuve un problema con el ejemplo - la llamada 'serialize' devolvía nulo. Funcionó cuando cambié los ID, según la respuesta de Lathan [aquí] (http://stackoverflow.com/a/966303/1714). No estoy seguro de si está relacionado con la versión de [etiqueta: jquery] – Hobo

3

La respuesta de David Heggie fue la más útil para mí. Puede ser un poco más conciso:

var sort = function(event, ui) { 
    var url = "/myReorderFunctionURL/" + $(this).sortable('serialize'); 
    $.post(url, null,null,"script"); // sortable("refresh") is automatic 
} 

$(".sort").sortable({ 
    cursor: 'move', 
    axis: 'y', 
    stop: sort 
}); 

funciona para mí, con el mismo marcado.

0

Si lo encuentra.serializar() devolver nulo en solución de David Heggie continuación, establezca los valores de identificación para el TRs como 'id_1' en lugar de simplemente '1'

Ejemplo:

<tr id="id_1"><td>1</td><td>Name1</td><td>Details1</td></tr> 
<tr id="id_2"><td>2</td><td>Name1</td><td>Details2</td></tr> 
<tr id="id_3"><td>3</td><td>Name1</td><td>Details3</td></tr> 
<tr id="id_4"><td>4</td><td>Name1</td><td>Details4</td></tr> 

Lo anterior se serializar como "id [] = 1 & id [] = 2 & id [] = 3 "

Puede usar '=', '-' o '_' en lugar de '_'. Y cualquier otra palabra además de "id".