Les étiquettes peuvent avoir plusieurs attributs. L'ordre dans lequel les attributs apparaissent dans le code n'a pas d'importance. Par exemple :
<a href="#" title="#">
<a title="#" href="#">
Comment puis-je "normaliser" le HTML en Javascript, afin que l'ordre des attributs soit toujours le même ? L'ordre choisi m'importe peu, du moment qu'il est toujours le même.
UPDATE Mon objectif initial était de faciliter la comparaison (en JavaScript) de deux pages HTML présentant de légères différences. Comme les utilisateurs pouvaient utiliser différents logiciels pour éditer le code, l'ordre des attributs pouvait changer. Cela rendait la différence trop verbeuse.
RÉPONSE : : Tout d'abord, merci pour toutes les réponses. Et OUI, c'est possible. Voici comment j'ai réussi à le faire. C'est une preuve de concept, cela peut certainement être optimisé :
function sort_attributes(a, b) {
if( a.name == b.name) {
return 0;
}
return (a.name < b.name) ? -1 : 1;
}
$("#original").find('*').each(function() {
if (this.attributes.length > 1) {
var attributes = this.attributes;
var list = [];
for(var i =0; i < attributes.length; i++) {
list.push(attributes[i]);
}
list.sort(sort_attributes);
for(var i = 0; i < list.length; i++) {
this.removeAttribute(list[i].name, list[i].value);
}
for(var i = 0; i < list.length; i++) {
this.setAttribute(list[i].name, list[i].value);
}
}
});
Même chose pour le deuxième élément du différentiel, $('#different')
. Maintenant $('#original').html()
y $('#different').html()
afficher le code HTML avec les attributs dans le même ordre.