Как нормализовать HTML в JavaScript или jQuery?

Теги могут иметь несколько атрибутов. Порядок, в котором атрибуты появляются в коде, не имеет значения. Например:

<a href="#" title="#">
<a title="#" href="#">

Как я могу «нормализовать» HTML в Javascript, чтобы порядок атрибутов всегда был одинаковым? Меня не волнует, какой порядок будет выбран, главное, чтобы он всегда был одинаковым.

ОБНОВЛЕНИЕ : моей первоначальной целью было упростить сравнение (в JavaScript) двух HTML-страниц с небольшими отличиями. Поскольку пользователи могут использовать другое программное обеспечение для редактирования кода, порядок атрибутов может измениться. Это делает разницу слишком многословной.

ОТВЕТ : Ну, сначала спасибо за все ответы. И ДА, это возможно. Вот как мне это удалось. Это доказательство концепции, ее, безусловно, можно оптимизировать:

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);
    }
  }
});

То же самое для второго элемента сравнения, $ ('# different') . Теперь $ ('# original'). Html () и $ ('# different'). Html () показывают HTML-код с атрибутами в том же порядке.

84
задан 8 revs, 5 users 57% 14 December 2011 в 15:27
поделиться