J'utilise un script pour trier un tableau sans recharger la page, en Javascript. Dans ce tableau, tout fonctionne bien (tri par int, string, date), sauf lorsque je veux trier par checkbox cochées ou non. Normal, le script de base de gère pas le tri de checkbox.
J'ai donc tenté de modifier le script, mais ça ne fonctionne pas encore.
Voici la fonction qui s'occupe du tri :
Code : Tout sélectionner
function sort2dFnc(a,b){
var col = intCol;
var dir = intDir;
var aCell = a.getElementsByTagName("td")[col].innerHTML;
var bCell = b.getElementsByTagName("td")[col].innerHTML;
switch (strMethod){
case "int":
aCell = parseInt(aCell);
bCell = parseInt(bCell);
break;
case "float":
aCell = parseFloat(aCell);
bCell = parseFloat(bCell);
break;
case "date":
parts = aCell.split("/");
var aCell = new Date(0);
aCell.setDate(parts[0]);
aCell.setMonth(parts[1]);
aCell.setFullYear(parts[2]);
aCell = new Date(aCell);
parts = bCell.split("/");
var bCell = new Date(0);
bCell.setDate(parts[0]);
bCell.setMonth(parts[1]);
bCell.setFullYear(parts[2]);
bCell = new Date(bCell);
break;
}
return (aCell>bCell)?dir:(aCell<bCell)?-dir:0;
}Code : Tout sélectionner
case "input":
aState = a.getElementsByTagName("td")[col].getElementsByTagName("input").checked;
if(aState == true)
aCell = 1;
else
aCell = 0;
bState = b.getElementsByTagName("td")[col].getElementsByTagName("input").checked;
if(bState == true)
bCell = 1;
else
bCell = 0;Des idées ?
Merci d'avance
Voici la totalité du fichier qui s'occupe du tri, sortTable.js, si ça peut aider :
Code : Tout sélectionner
function sortableTable(tableIDx,intDef,sortProps){
var tableID = tableIDx;
var intCol = 0;
var intDir = 1;
var strMethod;
var arrHead = null;
var arrMethods = sortProps.split(",");
this.init = function(){
arrHead = document.getElementById(tableID).getElementsByTagName('thead')[0].getElementsByTagName('th');
for(var i=0;i<arrHead.length;i++){
arrHead[i].onclick = new Function(tableIDx + ".sortTable(" + i + ",'" + arrMethods[i] + "');");
}
this.sortTable(intDef,arrMethods[intDef]);
}
this.sortTable = function(intColx,strMethodx){
intCol = intColx;
strMethod = strMethodx;
var arrRows = document.getElementById(tableID).getElementsByTagName('tbody')[0].getElementsByTagName('tr');
intDir = (arrHead[intCol].className=="asc")?-1:1;
arrHead[intCol].className = (arrHead[intCol].className=="asc")?"des":"asc";
for(var i=0;i<arrHead.length;i++){
if(i!=intCol){arrHead[i].className="";}
}
var arrRowsSort = new Array();
for(var i=0;i<arrRows.length;i++){
arrRowsSort[i]=arrRows[i].cloneNode(true);
}
arrRowsSort.sort(sort2dFnc);
for(var i=0;i<arrRows.length;i++){
arrRows[i].parentNode.replaceChild(arrRowsSort[i],arrRows[i]);
arrRows[i].className = (i%2==0)?"":"alt";
}
}
function sort2dFnc(a,b){
var col = intCol;
var dir = intDir;
var aCell = a.getElementsByTagName("td")[col].innerHTML;
var bCell = b.getElementsByTagName("td")[col].innerHTML;
switch (strMethod){
case "int":
aCell = parseInt(aCell);
bCell = parseInt(bCell);
break;
case "float":
aCell = parseFloat(aCell);
bCell = parseFloat(bCell);
break;
case "date":
parts = aCell.split("/");
var aCell = new Date(0);
aCell.setDate(parts[0]);
aCell.setMonth(parts[1]);
aCell.setFullYear(parts[2]);
aCell = new Date(aCell);
parts = bCell.split("/");
var bCell = new Date(0);
bCell.setDate(parts[0]);
bCell.setMonth(parts[1]);
bCell.setFullYear(parts[2]);
bCell = new Date(bCell);
break;
case "input":
aState = a.getElementsByTagName("td")[col].getElementsByTagName("input").checked;
if(aState == true)
aCell = 1;
else
aCell = 0;
bState = b.getElementsByTagName("td")[col].getElementsByTagName("input").checked;
if(bState == true)
bCell = 1;
else
bCell = 0;
}
return (aCell>bCell)?dir:(aCell<bCell)?-dir:0;
}
}
// La même fonction, mais pour faire un tri DESC par défaut
function sortableTableDesc(tableIDx,intDef,sortProps){
var tableID = tableIDx;
var intCol = 0;
var intDir = 1;
var strMethod;
var arrHead = null;
var arrMethods = sortProps.split(",");
this.init = function(){
arrHead = document.getElementById(tableID).getElementsByTagName('thead')[0].getElementsByTagName('th');
for(var i=0;i<arrHead.length;i++){
arrHead[i].onclick = new Function(tableIDx + ".sortTable(" + i + ",'" + arrMethods[i] + "');");
}
this.sortTable(intDef,arrMethods[intDef]);
}
this.sortTable = function(intColx,strMethodx){
intCol = intColx;
strMethod = strMethodx;
var arrRows = document.getElementById(tableID).getElementsByTagName('tbody')[0].getElementsByTagName('tr');
intDir = (arrHead[intCol].className=="des")?1:-1;
arrHead[intCol].className = (arrHead[intCol].className=="des")?"asc":"des";
for(var i=0;i<arrHead.length;i++){
if(i!=intCol){arrHead[i].className="";}
}
var arrRowsSort = new Array();
for(var i=0;i<arrRows.length;i++){
arrRowsSort[i]=arrRows[i].cloneNode(true);
}
arrRowsSort.sort(sort2dFnc);
for(var i=0;i<arrRows.length;i++){
arrRows[i].parentNode.replaceChild(arrRowsSort[i],arrRows[i]);
arrRows[i].className = (i%2==0)?"":"alt";
}
}
function sort2dFnc(a,b){
var col = intCol;
var dir = intDir;
var aCell = a.getElementsByTagName("td")[col].innerHTML;
var bCell = b.getElementsByTagName("td")[col].innerHTML;
switch (strMethod){
case "int":
aCell = parseInt(aCell);
bCell = parseInt(bCell);
break;
case "float":
aCell = parseFloat(aCell);
bCell = parseFloat(bCell);
break;
case "date":
parts = aCell.split("/");
var aCell = new Date(0);
aCell.setDate(parts[0]);
aCell.setMonth(parts[1]);
aCell.setFullYear(parts[2]);
aCell = new Date(aCell);
parts = bCell.split("/");
var bCell = new Date(0);
bCell.setDate(parts[0]);
bCell.setMonth(parts[1]);
bCell.setFullYear(parts[2]);
bCell = new Date(bCell);
break;
}
return (aCell>bCell)?dir:(aCell<bCell)?-dir:0;
}
}