// Call like this: // html(element); - retrieves the innerHTML of an element // html(element, true); - retrieves the outerHTML of an element var html = (function() { var ELEMENT = this.Node?Node.ELEMENT_NODE:1, TEXT = this.Node?Node.TEXT_NODE: 3; return function html(el, outer) { var i = 0, j = el.childNodes, k = outer?"<" + (m = el.nodeName.toLowerCase()) + attr(el) + ">":"", l = j.length, m, n; while(i !== l) switch((n = j[i++]).nodeType) { case ELEMENT: k += html(n, true); break; case TEXT: k += n.nodeValue; } return k + (outer?"":""); }; function attr(el) { var i = 0, j = el.attributes, k = new Array(l = j.length), l, m; while(i !== l) k[i] = (m = j[i++].nodeName) + "=\"" + el.getAttribute(m) + "\""; return (l?" ":"") + k.join(" "); } })();