Les balises 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, pour que l'ordre des attributs soit toujours le même? Peu m'importe quel ordre est choisi, tant qu'il est toujours le même.
MISE À JOUR : mon objectif initial était de faciliter la comparaison (en JavaScript) de 2 pages HTML avec de légères différences. Étant donné que les utilisateurs peuvent utiliser différents logiciels pour modifier le code, l'ordre des attributs peut changer. Cela rend le diff trop verbeux.
RÉPONSE : Eh bien, 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, elle peut certainement être optimisée:
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 de la diff $('#different')
. Maintenant $('#original').html()
et $('#different').html()
affichez le code HTML avec les attributs dans le même ordre.