Las etiquetas pueden tener varios atributos. El orden en que aparecen los atributos en el código no importa. Por ejemplo:
<a href="#" title="#">
<a title="#" href="#">
¿Cómo puedo "normalizar" el HTML en Javascript, para que el orden de los atributos sea siempre el mismo? No me importa qué orden se elija, siempre que sea el mismo.
ACTUALIZACIÓN : mi objetivo original era facilitar la diferenciación (en JavaScript) de 2 páginas HTML con ligeras diferencias. Dado que los usuarios pueden utilizar un software diferente para editar el código, el orden de los atributos podría cambiar. Esto hace que el diff sea demasiado detallado.
RESPUESTA : Bueno, primero gracias por todas las respuestas. Y SÍ, es posible. Así es como me las arreglé para hacerlo. Esta es una prueba de concepto, ciertamente se puede optimizar:
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);
}
}
});
Lo mismo para el segundo elemento del diff, $('#different')
. Ahora $('#original').html()
y $('#different').html()
muestre el código HTML con los atributos en el mismo orden.