Esta sencilla función proporciona un árbol XML (conforme a DOM) del documento HTML actual. Únicamente es necesaria para Internet Explorer, ya que en Mozilla y similares los propios nodos HTML son a la vez nodos DOM.
function document2DOM() { var root = new ActiveXObject("MSXML.DOMDocument"); root.async = false; root.resolveExternals = false; loadNode(root,root,document); return root; } function loadNode(root,parentNode,htmlNode) { switch (htmlNode.nodeType) { // Comment node case 8 : parentNode.appendChild( root.createComment( htmlNode.nodeValue ) ); return; // CDATA section case 4: parentNode.appendChild( root.createCDATASection( htmlNode.nodeValue ) ); return; // Text node case 3 : parentNode.appendChild( root.createTextNode( htmlNode.nodeValue) ); return; // Document Node case 9 : var children = htmlNode.childNodes; for (var i = 0; i < children.length; i++) { loadNode(root,root,children[i]); } return; // Element node case 1 : var element = root.createElement( htmlNode.nodeName ) parentNode.appendChild(element); // Set all attributes for (var i = 0; i < htmlNode.attributes.length; i++) { var attr = htmlNode.attributes[i]; if (attr.nodeValue && attr.specified) { var attrNode = root.createAttribute(attr.nodeName); attrNode.value = attr.nodeValue; element.setAttributeNode(attrNode); } } // Now process the children var children = htmlNode.childNodes; for (var i = 0; i < children.length; i++) { loadNode(root,element,children[i]); } return; } } function test() { var result = document2DOM(); alert(result.xml) }
Pulsa para probar la función "en vivo". (Sólo para Internet Explorer)
|
doc2dom.js ( 1 Kb ) |