mathefritz: NodeNotFound

zum verzweifeln:

                if ( !ln.P ){
xx = ln.childNodes[2].childNodes[1];
console.log(xx);
		  ln.childNodes[2].childNodes[1]
                        .replaceChild( mkImg(mSms,mSPls),
                                       ln.childNodes[2].childNodes[1]
			 );

keine Beanstandung der Zuweisung an xx, richtige Ausgabe des console.log ABER
Alternativ-Text

Die "ln" ist eine <tr> mit 3 <td>, das 3te der <td> enthält 3 <img ...> und das 2te letzterer soll ersetzt werden.
Ach ja, die childNodes[2].length ist angeblich undefined

  1. @@mathefritz

    Ach ja, die childNodes[2].length ist angeblich undefined

    Für Tabellen gibt es die tBodies[]-, rows[]- und cells[]-Collections sowie tHead und tFoot. Sollte man nutzen anstatt sich per childNodes[] durchs DOM zu hangeln. http://www.javascriptkit.com/domref/tableproperties.shtml

    Weiteres lässt sich sagen, nachdem du den Link zur problematischen Seite mitgeteilt hast.

    LLAP 🖖

    --
    “The best way to help people learn: answer their coding question an hour later, they’ll have likely figured it out by then.” —Todd Motto
    Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
    1. Hallo Gunnar,

      leider verstehe ich nicht, wie Du es meinst;

      Ein neuer Test mit

      console.log(ln.childNodes.length); console.log(ln.childNodes[0]); console.log(ln.childNodes[1]); console.log(ln.childNodes[2]);

      ergab:

      3 Interac...tart.js (Zeile 30)
      <td align="right"> Interac...tart.js (Zeile 31)
      <td width="3em" align="center"> Interac...tart.js (Zeile 32)
      <td align="left"> Interac...tart.js (Zeile 33)
      NotFoundError: Node was not found
      ln.childNodes[2].childNodes[1]

      Link? eigentlich teste ich noch lokal; aber bitte sehr:

      http://schmieder-laher.de/INARBEIT/
      zu Starten mit
      2terAbschnittNeu.html, der das Bild und Arrays2.js nachholt,
      was HilfsFunktionen.js nachholt,
      was Initialisierungen.js nachholt,
      was InteractionsStart.js nachholt; nun ist Clickhandlich scharf;

      momentan, um zu dem Problem zu komen, Debugger aktivieren und
      folgende Klicks auf der Bildschirm tastatur:
      c

      c und = klappen

      Danke für Eure Mühe.

      1. Tach!

        Link? eigentlich teste ich noch lokal; aber bitte sehr:

        Man kann die Arbeitsweise von Code mitunter nur dann untersuchen und das Problem erkennen, wenn einem auch die Daten vorliegen, mit denen der Code arbeiten soll. Ohne einen Link zum eigentlichen oder einem nachgestellten Problemfall ist es dann nicht oder nur schwer möglich zu helfen.

        Dein Problem liegt darin, dass replaceChild() vom Eltern-Node aufgerufen werden muss. Du rufst es allerdings vom Image auf, und das hat keine Kinder, deshalb die Fehlermeldung. Aber eigentlich ist das Image das Kind, das es zu ersetzen gilt. replaceChild() muss also eine Ebene weiter oben angesetzt werden.

        dedlfix.

        1. Hallo dedlfix, danke, Du meinst also die Zeilen 34..36 sollen

                                ln.childNodes[2]
                                  .replaceChild( mkImg(mSms,mSPls),
                                                 ln.childNodes[2].childNodes[1]
                                   );
          

          lauten - oja, klappt tatsächlich, und im "case: mSc" war's ja klar.

          Herzlichen Dank für die schnelle Analyse. Fritz.

  2. Hi,

    xx = ln.childNodes[2].childNodes[1];

    befinden sich whitespaces (i.e. text-nodes) zwischen den HTML-Elementen? Oder Kommentare? Beides zählt auch zu den childNodes ...

    Willst Du statt childNodes evtl. lieber children benutzen? Da werden text-Knoten und Kommentare nicht mitgeliefert ...

    cu,
    Andreas a/k/a MudGuard

    1. @@MudGuard

      Willst Du statt childNodes evtl. lieber children benutzen?

      In Tabellen eher nicht.

      LLAP 🖖

      --
      “The best way to help people learn: answer their coding question an hour later, they’ll have likely figured it out by then.” —Todd Motto
      Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
      1. Hi,

        Willst Du statt childNodes evtl. lieber children benutzen?

        In Tabellen eher nicht.

        Deine Lösung aber auch eher nicht. Die betroffene Zelle scheint ja was besonderes zu sein - da sollte das auszutauschende Bild eigentlich identifiert worden sein.

        Außerdem nehm ich hier leichtes Tabellenlayout-Aroma wahr ...

        cu,
        Andreas a/k/a MudGuard

    2. Danke Andreas,

      siehe Antwort an Gunnar.

      Gruß Fritz.