Marc Nilius: "contains" ausserhalb des IE

Hallo liebes Forum!

Ich habe hier einen Funktionshaufen der nur im IE funktioniert. Da ich persoenlich aber Kompatibilitaet vorziehe wuerde ich die gerne umschreiben, so dass zumindest mehr Browser damit klar kommen:

function mon(zelle)
        {
         if (!zelle.contains(event.fromElement))
         {
         ...
         }
        }

Welche anderen Moeglichkeiten als "contains" habe ich, das obige zu realisieren (check ob Element wieder verlassen wurde)?

Gruss,
Marc

--
Alles wird gut - www.amazingmedia.de
  1. hallo Marc,

    ganz sicher bin ich nicht, aber ich glaube, es kommt auf diese Anweisung an:

    if (!zelle.contains(event.fromElement))

    du hast hier ein Ausrufezeichen drinstehen, also sowas wie eine Negation. Das ist zumindest etwas ungewöhnlich, weil deine Abfrage mit "if/else" ja genau das Ausschlußverfahren darstellt. Korrigiere das, mach die Abfrage "postiv" und packe in deine "elese"-Anweisung das rein was passieren soll, wenn "zelle" eben nicht "event.fromElement" enthält

    Soso, der IE kann das darstellen? Kein Wunder ...

    Weiteres zu "contains" findest du in http://selfhtml.teamone.de/javascript/objekte/all.htm#contains

    Grüße aus Berlin

    Christoph S.

    1. Hallihalloechen!

      du hast hier ein Ausrufezeichen drinstehen, also sowas wie eine Negation. Das ist zumindest etwas ungewöhnlich, weil deine Abfrage mit "if/else" ja genau das Ausschlußverfahren darstellt. Korrigiere das, mach die Abfrage "postiv" und packe in deine "elese"-Anweisung das rein was passieren soll, wenn "zelle" eben nicht "event.fromElement" enthält

      Also ich hab diese Zeile auch nicht erfunden, aber ich habe das so verstanden:
      Die Zeile bedeutet: "Wenn das Element welches durch zelle uebergeben wird nicht ein Event enthaelt, tue etwas. (Es gibt uebrigens keinen else-Zweig) Das Event, was das Objekt nicht enthalten darf ist FromElement, was meinem Verstaendnis nach das Event ist, welches ausgeloest wird, wenn die Maus das Element wieder verlassen hat."
      Ergo: Der Teil in der if-Schleife wird ausgefuehrt, wenn das Objekt "zelle" noch nicht wieder verlassen wurde...

      Soso, der IE kann das darstellen? Kein Wunder ...

      Ja, der IE kann das, weil contains ja zu "all" gehoert. Alle anderen Browser allerdings nicht.
      Was kann ich denn da als Aequivalent benutzen anstatt "contains"?

      Ich hoffe, ich wurde verstanden und habe nicht zuviel Muell erzaehlt.. ;-)

      Gruss,
      Marc

      1. n'abends,

        wolln wir nochmal:

        Soso, der IE kann das darstellen? Kein Wunder ...
        Ja, der IE kann das

        NEIN, meiner kann das nicht (mehr). Das Verständnis für "all" ist offenbar an bestimmte (niedrigere) IE-Versionen gebunden, die dann zum Beispiel "getElementById" noch nicht verstehen.

        weil contains ja zu "all" gehoert.

        eben. Und wenn du in SELFHTML die Seite, die ich dir genannt habe, richtig gelesen hast, weißt du auch, daß "all" ein "IE-spezifisches" Element ist/war  -  abhängig von der Versionsnummer.

        Was kann ich denn da als Aequivalent benutzen anstatt "contains"?

        Du kannst das, was in "contains" stehen soll, in eine Variable packen und abfragen, ob diese Variable einen Inhalt hat oder nicht.

        Die Zeile bedeutet: "Wenn das Element welches durch zelle uebergeben wird nicht ein Event enthaelt, tue etwas."

        stimmt. So hab ich das ebenfalls gelesen

        Es gibt uebrigens keinen else-Zweig

        ja, warum denn nicht? Du willst ein Event davon abhängig machen, ob eine Bedingung zutrifft oder nicht. Das ist doch die geradezu klassische Aufforderung, eben eine "bedingte Anweisung" (siehe SLFHTML) mit einer "if/else-Kombination" zu schreiben ;-)

        Ich hoffe, ich wurde verstanden und habe nicht zuviel Muell erzaehlt.. ;-)

        naja, es gibt deutlich mehr "müllähnliche" Anfragen ...

        Grüße aus Berlin

        Christoph S.

        1. Moin!

          wolln wir nochmal:

          Soso, der IE kann das darstellen? Kein Wunder ...
          Ja, der IE kann das
          NEIN, meiner kann das nicht (mehr). Das Verständnis für "all" ist offenbar an bestimmte (niedrigere) IE-Versionen gebunden, die dann zum Beispiel "getElementById" noch nicht verstehen.

          Also meiner kann das schon ;-) (IE 6)
          Nur zum Beispiel mein Mozilla versteht das nicht...

          Nochmal zum Problem:
          In der HTML-Datei siehts folgendermassen aus:

          <tr><td onmouseover="mon(this); return true;" onmouseout="moff(this); return true;">...</td></tr>

          Und in der passenden JS-Funktion steht:

          function mon(zelle)
                  {
                   if (!zelle.contains(event.fromElement))
                   {
                    zelle.style.cursor = 'pointer';
                    zelle.style.backgroundColor='#AAAAAA';
                   }
                  }

          Diese Skript-Kombination funktioniert bei mir *nur* im IE6 (einen aelteren IE hab ich nicht mehr da).

          Da ich persoenlich finde, es muesse doch moeglich sein, ein paar mehr Browsern diese Funktionalitaet zukommen zu lassen, versuche ich jetzt etwas zu finden, was dem contains von "all" entspricht und in mehr Browsern als nur IE funktioniert.

          Bei diesem Skript wird ja das aktuelle Objekt uebergeben. Geht sowas auch mit DOM, oder muss ich jedem Element ueber das diese Funktion laeuft ne id zuweisen und die uebergeben?

          Du kannst das, was in "contains" stehen soll, in eine Variable packen und abfragen, ob diese Variable einen Inhalt hat oder nicht.

          Sorry, ist heute wohl noch was frueh fuer mich: Wie meinen?

          Ich hab irgendwie die Vermutung das wir beide dasselbe meinen aber trotzdem aneinander vorbeireden... ;-)

          Gruss,
          Marc