Froggels: IE-Interpretationsfehler

Hallo,
Ich habe ein JavaScript das mir das einblenden und ausbelenden von Spalten ermöglicht. Nun habe ich heute das alles mal im InternetExplorer getestet und sehe da es funktioniert nicht.
Im Mozilla klappt das Script ohne Probleme.
Kann mir evt. einer sagen warum IE das nicht macht bzw. falsch interpretiert?

Hier der Quellcode:

<HTML>
<HEAD>
<script type="text/javascript">

var ns6=document.getElementById&&!document.all
var ie4=document.all&&navigator.userAgent.indexOf("Opera")==-1

if (ie4||ns6)
document.onclick=checkcontained

function checkcontained(e)
{
var iscontained=0
cur=ns6? e.target : event.srcElement
i=0
if (cur.id=="foldheader")
 iscontained=1
else
 while (ns6&&cur.parentNode||(ie4&&cur.parentElement))
  {
  if (cur.id=="foldheader"||cur.id=="foldinglist")
   {
   iscontained=(cur.id=="foldheader")? 1 : 0
   break
   }
   cur=ns6? cur.parentNode : cur.parentElement
   }
  if (iscontained)
   {
   var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0]
   if (foldercontent.style.display=="none")
    {
    foldercontent.style.display=""
    }
   else
    {
    foldercontent.style.display="none"
    }
   }
  }
</script>
</HEAD>
<BODY>

<Table border="1">
<tr id="foldheader">
<td colspan="1" valign="top"  width="10%">
VORNAME
</td>
<td class="label" colspan="1" valign="top" align="right" width="10%">
NACHNAME
</td>
</tr>
<tr id="foldinglist" style="display:none" style=&{head};>
<td colspan="2" valign="top"  width="20%">
INFORMATIONEN
</td>
</tr>

</BODY>
</HTML>

  1. Yerf!

    Kann mir evt. einer sagen warum IE das nicht macht bzw. falsch interpretiert?

    [...]

    var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0]

    Evtl. weil im HTML klein <ul> vorkommt?

    Gruß,

    Harlequin

    1. Hallo,

      var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0]

      Evtl. weil im HTML klein <ul> vorkommt?

      Da kommt doch nirgends ein ul vor (weder groß noch klein) oder war ein Tippfehler und Du meintest kein?

      Viele Grüße

      Michi

      1. Yerf!

        Hallo,

        var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0]

        Evtl. weil im HTML klein <ul> vorkommt?

        Da kommt doch nirgends ein ul vor (weder groß noch klein) oder war ein Tippfehler und Du meintest kein?

        Ups... ich meinte natürlich kein. Aber mit cur.all.tags("UL")[0] wird eben versucht, auf eines zuzugreifen, was mit einer entsprechenden Fehlermeldung quitiert werden sollte.

        Gruß,

        Harlequin

        1. Hallo,

          Ups... ich meinte natürlich kein. Aber mit cur.all.tags("UL")[0] wird eben versucht, auf eines zuzugreifen, was mit einer entsprechenden Fehlermeldung quitiert werden sollte.

          War auch nicht ganz ernst gemeint ;-) aber ich hab grad gesehen, dass ich selbst nicht richtig aufgepasst habe, weil ich nämlich davon ausging, dass für ie die erste Option (cur.nextSibling.nextSibling) zugewiesen werden würde.

          Grüße

          Michi

        2. Ups... ich meinte natürlich kein. Aber mit cur.all.tags("UL")[0] wird eben versucht, auf eines zuzugreifen, was mit einer entsprechenden Fehlermeldung quitiert werden sollte.

          Danke das wird wohl das Problem sein. Aber wie kann ich das abändern, das die JavaScript-Funktion für meine Tabelle funktioniert?
          Ich würde nicht nachfragen, wenn ich nicht schon alles möglich versucht  hätte. Ich bin leider noch ein Neuling in javaScript und verzweifel immer wieder.
          Ich habe den orginal Quelltext gefunden. Da wird tatsächlich mit <UL> gearbeitet.

          Wie kann ich nun die Funktion oder Tabelle abändern, damit der IE das richtig interpretiert?

          Hier der orginal Quelltext (ersetzen durch die Tabelle):

          <ul>
             <li id="foldheader">News</li>
             <ul id="foldinglist" style="display:none" style=&{head};>
                <li><a href="http://www.cnn.com">CNN</a></li>
                <li><a href="http://www.abcnews.com">ABC News</a></li>
                <li><a href="http://www.news.bbc.co.uk">BBC News</a></li>
             </ul>

          <li id="foldheader">Webmaster</li>
             <ul id="foldinglist" style="display:none" style=&{head};>
                <li><a href="http://www.dynamicdrive.com">Dynamic Drive</a></li>
                <li><a href="http://www.javascriptkit.com">JavaScript Kit</a></li>
                <li><a href="http://www.freewarejava.com">Freewarejava.com</a></li>
             </ul>

          <li id="foldheader">Nested Example</li>
             <ul id="foldinglist" style="display:none" style=&{head};>
                <li><a href="http://www.dynamicdrive.com">outer 1</a></li>
                <li><a href="http://www.dynamicdrive.com">outer 2</a></li>
                <li id="foldheader">Nested</li>
                <ul id="foldinglist" style="display:none" style=&{head};>
                   <li><a href="http://www.dynamicdrive.com">nested 1</a></li>
                   <li><a href="http://www.dynamicdrive.com">nested 2</a></li>
                </ul>
                <li><a href="http://www.dynamicdrive.com">outer 3</a></li>
                <li><a href="http://www.dynamicdrive.com">outer 4</a></li>
             </ul>
          </ul>

          1. Yerf!

            Wie kann ich nun die Funktion oder Tabelle abändern, damit der IE das richtig interpretiert?

            Hm, so ohne weiteres blick ich in dem Script grad nicht durch. Aber wenn dir IEs älter als 5.5 egal sind könntest du die Browserabfrage entfernen und den IE ebenfalls den Code für den Mozilla ausführen lassen.

            Gruß,

            Harlequin

            1. Hm, so ohne weiteres blick ich in dem Script grad nicht durch. Aber wenn dir IEs älter als 5.5 egal sind könntest du die Browserabfrage entfernen und den IE ebenfalls den Code für den Mozilla ausführen lassen.

              Ich bin leider noch nicht weiter gekommen. Wenn einer noch eine Idee hat, wäre ich sehr dankbar für.

              1. Ich bin leider noch nicht weiter gekommen. Wenn einer noch eine Idee hat, wäre ich sehr dankbar für.

                Ja

                Struppi.

                --
                Javascript ist toll (Perl auch!)
  2. Hallo,

    Im Mozilla klappt das Script ohne Probleme.
    Kann mir evt. einer sagen warum IE das nicht macht bzw. falsch interpretiert?

    Ja. Füge mal ein

    alert(cur.nextSibling.nextSibling.nodeName);

    vor

    var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0];

    ein und Du siehst warum.

    Allerdings kann/will ich Dir das problem in dem "Wust-Code" nicht sauber lösen.
    Aber es funktioniert wenn Du nach
    var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0];

    folgende Zeile einfügst:
    if (cur.nextSibling.nextSibling.nodeName == "") foldercontent = document.getElementById("foldinglist");

    (Allerdings musst Du dann evtl. mal darauf achten, dass Du einzelne Anweisungen mit ; beendest).

    Viele Grüße

    Michi

    1. Hallo,

      muss mich korrigieren:

      Ja. Füge mal ein

      alert(cur.nextSibling.nextSibling.nodeName);

      vor

      var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0];

      ein und Du siehst warum.

      muss korrekt lauten:
      Ja. Füge mal ein
      alert(cur.all.tags("UL")[0]);
      vor
      var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0];
      ein und Du siehst warum.

      (Falls Du nichts siehst, klicke mal doppelt auf das gelbe Rufezeichen in der Statuszeile.)

      viele Grüße

      Michi

  3. function checkcontained(e)
    {
    var iscontained=0
    cur=ns6? e.target : event.srcElement

    du musst hier auch noch das Event Objekt des IEs ermitteln.

    function checkcontained(e)
    {
    if(!e) e = window.event;
    var iscontained=0
    var cur= e.target || event.srcElement

    i=0

    Nie!
    Globale variabeln sind sehr schelchter Stil und führen gern zu Fehlern.

    Den Rest hab ich mir erstmal nicht angeschaut.

    Struppi.

    --
    Javascript ist toll (Perl auch!)