je suis tombé sur ce en essayant de corriger ce que je recherchais. J'ai pris la méthode de @ shrikant-sharat et ajouté un peu car l'attribut que j'avais besoin de trier était en fait sur un élément enfant. Je pensais que je ajouterais ici au cas où il aide tout le monde (et pour l'avenir moi!)
$.fn.asort = function (order, attrName, filter) {
console.log(this.length, order.length, order);
for(var i = 0, len = order.length; i < len; ++i) {
if(typeof(filter) === 'function') {
filter(this.children(), attrName, order[i]).appendTo(this);
} else {
this.children('[' + attrName + '=' + order[i] + ']').appendTo(this);
}
}
return this.children();
}
Il vous permet de passer d'une fonction de filtre pour correspondre à l'élément que vous êtes après. Ce n'est pas le plus efficace je suppose, mais cela fonctionne pour moi, par exemple:
$('.my-list').asort(mapViewOrder, 'data-nid', function(items, attrName, val) {
return items.filter(function(index, i) {
return ($(i).find('[' + attrName + '="' + val + '"]').length);
});
});
Y a-t-il une sorte de 'logique' derrière cet ordre ou en avez-vous besoin exactement comme ça? – jAndy
'n' n'est pas un attribut' tag html' valide. Cela vous causera un comportement indésirable sur certains navigateurs. – Reigel
@jAndy: Je veux exactement comme ça: D @Reigel: jquery ont expando attribuer lui-même. – StoneHeart