I tag possono avere più attributi. L'ordine in cui gli attributi vengono visualizzati nel codice non ha importanza. Per esempio:
<a href="#" title="#">
<a title="#" href="#">
Come posso "normalizzare" l'HTML in Javascript, in modo che l'ordine degli attributi sia sempre lo stesso? Non mi interessa quale ordine viene scelto, purché sia sempre lo stesso.
AGGIORNAMENTO : il mio obiettivo originale era di rendere più facile diff (in JavaScript) 2 pagine HTML con lievi differenze. Poiché gli utenti possono utilizzare software diversi per modificare il codice, l'ordine degli attributi potrebbe cambiare. Questo rende il diff troppo prolisso.
RISPOSTA : Bene, prima grazie per tutte le risposte. E SÌ, è possibile. Ecco come sono riuscito a farlo. Questa è una prova di concetto, sicuramente può essere ottimizzata:
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);
}
}
});
Stessa cosa per il secondo elemento del diff, $('#different')
. Ora $('#original').html()
e $('#different').html()
mostra il codice HTML con attributi nello stesso ordine.