J'ai un script de tri JS, mais est la commande # 's comme ceci:javascript type grille par numéro, la commande numéro
1.
10.
11.
2.
3.
4.
Je veux qu'ils soient classées par ordre décroissant, comme ceci:
1.
2.
3.
4.
10.
11.
Je ne peux pas comprendre cela. Je sais qu'il existe un moyen de le faire avec MySQL, mais je ne suis pas familier avec javascript. Voici ce que j'ai jusqu'ici, mais c'est ordonner des nombres numériques incorrects. J'apprécie n'importe quelle aide que vous pouvez fournir, ou juste me tirant la bonne direction.
JavaScript:
var Grid = new Class({
/** define some variables */
table: false,
headers: false,
data: false,
/**
* Initialize the object
*/
initialize: function(table){
this.table = table;
this.getHeaders();
},
/**
* Get the headers
*/
getHeaders: function(){
this.headers = this.table.getElements('thead tr th');
this.headers.each(function(h, index){
//h.store('asc', false);
if (h.hasClass('sort')) h.addEvent('click', function(){
if(h.hasClass('asc')){
h.className = 'sort desc';
//h.addClassName('desc');
}else{
h.className = 'sort asc';
//h.addClassName('asc');
}
//if (h.retrieve('asc')) h.store('asc', false);
//else h.store('asc', true);
//this.sort($('tblrank_id'));
this.sort(index);
}.bind(this));
}, this);
},
/**
* Get the table data
*/
getData: function(){
this.data = this.table.getElements('tbody tr');
},
/**
* Sort the data
* @param int index
*/
sort: function(index){
this.getData();
data = [];
sortType = this.headers[index].getProperty('axis');
asc = this.headers[index].hasClass('asc');//this.headers[index].retrieve('asc');
if (this.data.length > 0) this.data.each(function(row, i){
cells = row.getElements('td');
if (cells.length < this.headers.length) return false;
value = cells[index].innerHTML;
if(cells[index].childNodes[0].nodeName.toLowerCase() == "a"){
//alert(cells[index].childNodes[0].innerHTML);
value = cells[index].childNodes[0].innerHTML;
}
if (sortType == 'int' || sortType == 'float'){
if (value.contains('$') || value.contains(',')) value = value.replace(/\$/g, '').replace(/,/g, '').toFloat();
else value = value.toFloat();
} else if (sortType == 'date') value = Date.parse(value);
data.push({'index': i, 'value': value, 'row': row});
}, this);
if (sortType == 'int' || sortType == 'float' || sortType == 'date') data.sort(this.sortNumeric);
else data.sort(this.sortCaseInsensitive);
if (!asc) data.reverse();
this.data = [];
data.each(function(d, i){
this.data.push(d.row);
}, this);
this.data.each(function(row, i){
if (row.hasClass('etblraw0')) row.removeClass('etblraw0');
if (row.hasClass('etblraw1')) row.removeClass('etblraw1');
this.table.getElement('tbody').adopt(row.addClass((i % 2 == 0 ? 'etblraw0' : 'etblraw1')));
}, this);
},
/**
* Sort Numerica Values
* @param object a
* @param object b
*/
sortNumeric: function(a, b){
if ($type(a.value) != 'number') a.value = 0;
if ($type(b.value) != 'number') b.value = 0;
return a.value - b.value;
},
sortCaseInsensitive: function(a, b){
a.value = a.value.toLowerCase();
b.value = b.value.toLowerCase();
if (a.value == b.value) return 0;
if (a.value < b.value) return -1;
return 1;
}
);
Si vous souhaitez créer exemple travailler en direct sur http://jsfiddle.net il sera très utile. –