Mathias: Zwei Probleme mit einem Javascript

Hallo

  1. Hab folgende HTML Seite mit JavaScript welches im IE läuft, in Mozilla jedoch nicht funktioniert. Klickt man auf den Button "GetNodes!" sollten z.B. die ID's aller aufgeklappten Knoten in der Textarea gespeichert werden. In Mozilla passiert nichts...weiss jemand warum?

  2. Erhalte ich in IE wo das Skript funktioniert immer am Schluss der Liste ein ",". Sieht jemand wo in der Rekursion ich was ändern muss, damit am Schluss kein Komma mehr steht...?

##########
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Node 1</title>
<style>
</style>
</head>
<body>

<script language="javascript">

//The hidden control id
var hiddenControlId = "textarea";

//Panel id prefix
var prefixPanel = "panel_";

//Defines which nodes to save
// block = defined displayed nodes
//  none  = defined hidden nodes
var save  = "block";

//Separator
var sep   = ",";

function toggleNode(id)  {
 if(document.getElementById(id).style.display == "none") {
  document.getElementById(id).style.display = "block";
 }else {
  document.getElementById(id).style.display = "none";
 }
}

function saveState()  {
 document.getElementById(hiddenControlId).innerText = getNodes(document.getElementById('tree'));
}

function getNodes(obj) {
 var output = "";

if((obj.id != undefined) && (obj.id.substring(0, prefixPanel.length) == prefixPanel) && (obj.style.display == save)) {
  output = obj.id + sep;
 }

if(obj.hasChildNodes()) {
  for(var i = 0; i < obj.childNodes.length; i++) {
   output += getNodes(obj.childNodes[i]);
  }
 }

return output;
}

</script>
<div id="tree">
<div id="node_1" style="border: 1px solid black;">
 <img style="cursor:pointer" border="0" src="plus.gif" width="16" height="22" onclick="toggleNode('panel_1')">Node 1
 <div id="panel_1" style="margin-left:20px;border: 1px solid black; display:block">
  <div id="node_11" style="border: 1px solid black">
   <img border="0" src="plus.gif" width="16" height="22" style="cursor:pointer" onclick="toggleNode('panel_11')">Node 1.1
   <div id="panel_11" style="margin-left:20px;border: 1px solid black; display:block"></div>
  </div>
  <div id="node_12" style="border: 1px solid black">
   <img style="cursor:pointer" border="0" src="plus.gif" width="16" height="22" onclick="toggleNode('panel_12')">Node 1.2
   <div id="panel_12" style="margin-left:20px;border: 1px solid black; display:block">
    <div id="node_121" style="border: 1px solid black">
     <img style="cursor:pointer" border="0" src="plus.gif" width="16" height="22" onclick="toggleNode('panel_121')">Node 1.2.1
     <div id="panel_121" style="margin-left:20px;border: 1px solid black; display:block"></div>
    </div>
   </div>
  </div>
  <div id="node_13" style="border: 1px solid black">
   <img style="cursor:pointer" border="0" src="plus.gif" width="16" height="22" onclick="toggleNode('panel_13')">Node 1.3
   <div id="panel_13" style="margin-left:20px;border: 1px solid black ; display:block"></div>
  </div>
 </div>
</div>
</div>
<form>
 <p><input type="button" value="GetNodes!" name="B3" onclick="saveState()">
 </p>
 <p><textarea id="textarea" rows="18" name="S1" cols="75"></textarea></p>
</form>

</body>

</html>

##########

Gruss Mathias

  1. Hallo,

    document.getElementById(hiddenControlId).innerText = getNodes(document.getElementById('tree'));

    [Node].innerText ist eine IE-Eigenschaft. Probiere

    document.getElementById(hiddenControlId).value = getNodes(document.getElementById('tree'));

    1. Erhalte ich in IE wo das Skript funktioniert immer am Schluss der Liste ein ",". Sieht jemand wo in der Rekursion ich was ändern muss, damit am Schluss kein Komma mehr steht...?

    function saveState()  {
     document.getElementById(hiddenControlId).value = getNodes(document.getElementById('tree')).substr(0, getNodes(document.getElementById('tree')).length-1 );
    }

    viele Grüße

    Axel