code: function elementsHaveSameNonClassAttributes(el1, el2) {
          if (el1.attributes.length != el2.attributes.length) return false;
          for (var i = 0, len = el1.attributes.length, attr1, attr2, name; i < len; ++i) {
              attr1 = el1.attributes[i];
              name = attr1.name;
              if (name != "class") {
                  attr2 = el2.attributes.getNamedItem(name);
                  if (attr1.specified != attr2.specified) return false;
                  if (attr1.specified && attr1.nodeValue !== attr2.nodeValue) return false;
              }
          }
          return true;
      }
docs: /*
  function normalize(node) {
  var child = node.firstChild, nextChild;
  while (child) {
  if (child.nodeType == 3) {
  while ((nextChild = child.nextSibling) && nextChild.nodeType == 3) {
  child.appendData(nextChild.data);
  node.removeChild(nextChild);
  }
  } else {
  normalize(child);
  }
  child = child.nextSibling;
  }
  }