タグは複数の属性を持つことができます。コードに属性が表示される順序は重要ではありません。例えば:
<a href="#" title="#">
<a title="#" href="#">
JavascriptでHTMLを「正規化」して、属性の順序が常に同じになるようにするにはどうすればよいですか?常に同じである限り、どちらの順序を選択してもかまいません。
更新:私の当初の目標は、わずかな違いで2つのHTMLページを(JavaScriptで)簡単に差分できるようにすることでした。ユーザーは別のソフトウェアを使用してコードを編集できるため、属性の順序が変わる可能性があります。これにより、差分が冗長になりすぎます。
答え:まあ、最初にすべての答えに感謝します。そして、はい、それは可能です。これが私がそれをどうやってやったかです。これは概念実証であり、確実に最適化できます。
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);
}
}
});
差分の2番目の要素についても同じです$('#different')
。今$('#original').html()
と$('#different').html()
同じ順序で属性を持つHTMLコードを示しています。