Hallo nochmal,
Man könnte das Skript umschreiben, sodass es alle Elemente und Kindknoten einliest und als HTML-Code ausgibt.
...genau das habe ich mal gemacht, und heraus kam das:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<!-- (K) ALL RIGHTS REVERSED - Reprint what you like -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>JavaScript/DOM: Rekursive Auflistung aller Kindknoten</title>
<script type="text/javascript">
//<![CDATA[
// by Mathias Schaefer (molily@gmx.de), licensed under
// GNU General Public License (http://www.gnu.org/copyleft/gpl.txt)
var ausgabe='';
function liste_unterknoten (knoten) {
if (knoten.nodeName=='#text') {
ausgabe+=knoten.nodeValue;
} else {
if (knoten.nodeName=='#comment') {
ausgabe+='<!--'+knoten.nodeValue+'-->';
} else {
ausgabe+='<'+knoten.nodeName;
if (knoten.attributes.length)
for (k=0; k<knoten.attributes.length; k++)
ausgabe+=' '+knoten.attributes[k].nodeName+'="'+knoten.attributes[k].nodeValue+'"';
if (knoten.hasChildNodes()) {
ausgabe+='>';
for (var i=0; i<knoten.childNodes.length; i++) {
knotenneu=knoten.childNodes[i];
liste_unterknoten(knotenneu); // Rekursion
}
ausgabe+='</'+knoten.nodeName+'>';
} else {
ausgabe+=' />';
}
}
}
}
//]]>
</script>
</head>
<body>
<!-- Beispieldokument (dieser Kommentar ist auch ein Unterknoten) -->
<h1>JavaScript/<abbr title="Document Object Model">DOM</abbr>: Rekursive Auflistung aller Kindknoten</h1>
<h2 title="Testattributwert">Testüberschrift</h2>
<script type="text/javascript">
//<![CDATA[
liste_unterknoten(document.getElementsByTagName('html')[0]);
document.write('<pre>'+ausgabe+'</pre>');
//]]>
</script>
</body>
</html>
Der Quellcode wird recht genau wiedergegeben, nur die Zeilenumbrüche werden verfälscht, mag auch an der Datei liegen. Getestet mit Mozilla 1.1.
Kommentare erwünscht. :)
Mathias