Torsten Liebig: Prüfen, ob Wertzuweisung erfolgreich war

Tach Post!

Bin nach einem halben Tag intensiver Recherche genausoweit wie vorher. Deswegen jetzt hier eine Frage, vielleicht gibt es jemanden, der schlauer ist als ich:

if (Zielobjekt=document.getElementById("ID").firstChild) {Zielobjekt.nodeValue=Text;}
else {alert("Zielobjekt nicht gefunden!");}

in meiner PHP-Denkweise will ich damit folgendes erreichen:
if (objektzuweisung) soll prüfen, ob die objektzuweisung erfolgreich war.
wenn ja, dann soll diesem element ein neuer Text zugewiesen werden (im funktionsaufruf übergeben).
wenn nein, soll sich die fkt. per alert() beschweren, dass es das objekt gar nicht gibt.

ich will nicht extra die existenz des elements überprüfen und dann hinterher die variable setzen und dieser den text zuweisen. ich will, dass er den text nur ändert, wenn er der variable das objekt zuweisen konnte. rein der effizienz zuliebe.

ich habe bis jetzt keine möglichkeit gefunden, die objektzuweisung auf erfolg zu prüfen. wenn das objekt nicht existiert, meckert javascript rum, weil es eben nicht existiert. wenn es existiert, funktioniert jedoch alles wunderbar.

Ideen?

Vielen Dank im voraus!
Torsten

  1. Moin!

    if (Zielobjekt=document.getElementById("ID").firstChild) {Zielobjekt.nodeValue=Text;}
    else {alert("Zielobjekt nicht gefunden!");}

    ich will nicht extra die existenz des elements überprüfen und dann hinterher die variable setzen und dieser den text zuweisen. ich will, dass er den text nur ändert, wenn er der variable das objekt zuweisen konnte. rein der effizienz zuliebe.

    Tja, Javascript ist nicht PHP, sondern weit davon entfernt. Dir wird nichts anderes übrig bleiben, als die typische Javascript-Methode anzuwenden.

    ich habe bis jetzt keine möglichkeit gefunden, die objektzuweisung auf erfolg zu prüfen. wenn das objekt nicht existiert, meckert javascript rum, weil es eben nicht existiert. wenn es existiert, funktioniert jedoch alles wunderbar.

    Du willst wissen, ob es document.getElementById("ID").firstChild gibt, damit du dort nodeValue=Text; machen kannst.

    Um Fehler zu vermeiden, musst du jedes Objekt auf dem Weg zum Ziel auf Existenz prüfen. Ist leider so. Aber es ist empfehlenswert, Prüfungen allgemeiner Objekte in Variablen zu speichern - das bringt Performance.

    Im Prinzip gehts so:
    if (document.getElementById)
    {
      if (document.getElementById("ID").firstChild)
      {
        if (document.getElementById("ID").firstChild.nodeValue)
        {
          document.getElementById("ID").firstChild.nodeValue = text;
        }
      }
    }

    Das kann man natürlich vereinfachen, indem gewisse Dinge einfach als vorhanden angenommen werden (der Preis ist, dass man bei gewissen Browsern falsch liegen kann).

    Außerdem kann man Performance gewinnen, indem nicht immer wieder dieselben Objektwege neu ausgeknobelt werden müssen. Vor allem getElementById() soll sehr zeitaufwendig sein. Deshalb kann man zwischenspeichern.

    if (document.getElementById)
    {
      element = document.getElementById("ID");
      if (element.firstChild)
      {
        elementfc = element.firstChild;
        if (elementfc.nodeValue)
        {
          elementfc.nodeValue = text;
        }
      }
    }

    Nur so als Beispiel.

    - Sven Rautenberg

    --
    "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
    1. Moin!

      Tja, Javascript ist nicht PHP, sondern weit davon entfernt. Dir wird nichts anderes übrig bleiben, als die typische Javascript-Methode anzuwenden.

      Ich wusste doch, dass ich das Richtige bevorzuge =)

      Du willst wissen, ob es document.getElementById("ID").firstChild gibt, damit du dort nodeValue=Text; machen kannst.

      Um Fehler zu vermeiden, musst du jedes Objekt auf dem Weg zum Ziel auf Existenz prüfen. Ist leider so. Aber es ist empfehlenswert, Prüfungen allgemeiner Objekte in Variablen zu speichern - das bringt Performance.

      Hm? Es reicht doch auch, dass Objekt selber existiert. Der Rest drüber in der Hierarchie interessiert mich ja gar nicht =) Ob er nun den Fehler beim Objekt selber oder irgendwo auf dem Weg dahin auftritt, macht ja keinen Unterschied. Wenn ein Objekt irgendwo in der Hierarchie fehlt, kann das entsprechende Unterobjekt auch nicht da sein. Also reicht mir zu prüfen, dass das unterste Objekt selber, das was mich interessiert, da ist.

      [recht ausführliches Beispiel}
      Nur so als Beispiel.

      Dankeschön. Bin trotzdem faul und nehme die einfache Abfrage des Objektes an sich =) Ist trotzdem schade, dass die PHP-Weise nich geht =<b>(</b>     (ganz dicke schmoll-lippe)

      Torsten

      1. Odium

        Tja, Javascript ist nicht PHP, sondern weit davon entfernt. Dir wird nichts anderes übrig bleiben, als die typische Javascript-Methode anzuwenden.

        Ich wusste doch, dass ich das Richtige bevorzuge =)

        da Javascript und PHP unterschiedliche Technlogien sind, kann man in diesem Fall nicht das Richtige bevorzugen...

        Odium

  2. Hallo,

    if (Zielobjekt=document.getElementById("ID").firstChild)
    {
    Zielobjekt.nodeValue=Text;
    }
    else
    {
    alert("Zielobjekt nicht gefunden!");
    }

    Deine if-Entscheidung ist kein Vergleich, sondern eine Zuweisung
    = <--> ==

    Dieser Vergleich wäre nur erfolgreich, wenn Zielobjekt bereits identsichen Inhalt mit document.getElementById("ID").firstChild aufweist.

    also existenz prüfen...

    Odium

    1. Hallo,

      if (Zielobjekt=document.getElementById("ID").firstChild)

      » Deine if-Entscheidung ist kein Vergleich, sondern eine Zuweisung
      » = <--> ==

      Das ist so richtig =)

      Dieser Vergleich wäre nur erfolgreich, wenn Zielobjekt bereits identsichen Inhalt mit document.getElementById("ID").firstChild aufweist.

      Ich will halt nicht vergleichen, sondern bei der Zuweisung gleichzeitig prüfen, ob diese erfolgreich war. Aber Sven meint schon, dass das bei JavaScript leider nicht funktioniert. PHP kann halt doch mehr =)

      also existenz prüfen...

      Hmprf.

      Trotzdem Danke für deine Mühen. =)
      Torsten

  3. Hallo Torsten,

    if (Zielobjekt=document.getElementById("ID").firstChild) {Zielobjekt.nodeValue=Text;}
    else {alert("Zielobjekt nicht gefunden!");}

    So habe ich das auch schon häufig gemacht, und es hat immer funktioniert. Wenn das Objekt nicht existiert, wird false zurückgegeben, was du mit alert(Zielobjekt=document.getElementById("ID").firstChild) sehr einfach überprüfen kannst. In welchem Browser funktioniert das denn nicht?

    Grüße, Stefan

    1. Hallo,

      if (Zielobjekt=document.getElementById("ID").firstChild) {Zielobjekt.nodeValue=Text;}
      else {alert("Zielobjekt nicht gefunden!");}

      So habe ich das auch schon häufig gemacht, und es hat immer funktioniert. Wenn das Objekt nicht existiert, wird false zurückgegeben, was du mit alert(Zielobjekt=document.getElementById("ID").firstChild) sehr einfach überprüfen kannst. In welchem Browser funktioniert das denn nicht?

      Korrektur: Es wird nicht false, sondern null (IE, Opera) bzw. ein leeres Objekt (Moz) zurückgegeben, und die untergeordneten Objekte müssen natürlich existieren. Wenn das nicht sicher ist, könnte man trotzdem mit Zuweisungen arbeiten:

      if((Zielobjekt=document.getElementById("ID")) && (Zielobjekt=Zielobjekt.firstChild))
      ...

      Grüße, Stefan