Linuchs: Merkwürdig: Eine HTML-id ist in JS als Objekt bekannt?

Moin,

<span id="tonart"></span>

hab mal wieder eine Stunde mit Fehlersuche zugebracht. Ist

document.querySelector("#tonart").innerHTML = setAkk_Tonika;

und

tonart = SetAkk_Tonika;

dasselbe?

Gruß Linuchs

  1. @@Linuchs

    <span id="tonart"></span>
    

    hab mal wieder eine Stunde mit Fehlersuche zugebracht. Ist

    document.querySelector("#tonart").innerHTML = setAkk_Tonika;
    

    und

    tonart = SetAkk_Tonika;
    

    dasselbe?

    Ja, in beiden Fällen wird ein Fehler geworfen, weil weder setAkk_Tonika noch SetAkk_Tonika definiert ist.

    Das ist einfach nur deine Schussligkeit, dass das einmal mit kleinem s und einmal mit großem S ist?

    Und es ist auch einfach nur deine Schussligkeit, dass da tonart und nicht tonart.innerHTML steht?

    Du wolltest eigentlich fragen, ob das Erste dasselbe ist wie tonart.innerHTML = setAkk_Tonika?

    Kwakoni Yiquan

    --
    Ad astra per aspera
    1. @@Gunnar Bittersmann

      Kann mir jemand den Minuspunkt für meinen Versuch erklären, einen Sinn in Linuchs’ schlampig zusammengeschriebenem Posting zu finden?

      Kwakoni Yiquan

      PS: Ich wollte gerade noch mehr über die Repräsentation von Elementen mit ID im DOM schreiben. Aber nee, Freunde, so nicht.

      --
      Ad astra per aspera
      1. Hallo Gunnar,

        PS: Ich wollte gerade noch mehr über die Repräsentation von Elementen mit ID im DOM schreiben. Aber nee, Freunde, so nicht.

        nur weil einer meckert, heißt das ja nicht, das alle dahinterstehen.

        Gruß
        Jürgen

        1. Hallo JürgenB,

          stehst Du hinter Gunnars Art, mit Fragestellern umzugehen?

          Rolf

          --
          sumpsi - posui - obstruxi
      2. Hallo Gunnar,

        mein Minuspunkt. Hätte ich noch was zu geschrieben, aber ich habe erstmal eine Antwort verfasst, die auf die Frage einging: Was hat es mit diesen globalen Variablen zu den IDs auf sich. Was der unverkennbare Kern von Linuchs' Posting war. Und eine Frage, nach der ich auch schonmal länger gesucht habe, bis ich die richtigen Fragewörter fand, die zu einer Antwort führten.

        Was für deine Antwort nicht galt, du hast lediglich auf den Fehlern in der Frage rumgehackt. Sicherlich waren die schusselig. Aber was gemeint ist, was klar. Was Du ausgeblendet und statt dessen den Fragesteller zerlegt hast. Und da wunderst Dich über ein Minus?

        Rolf

        --
        sumpsi - posui - obstruxi
        1. @@Rolf B

          mein Minuspunkt. Hätte ich noch was zu geschrieben, aber ich habe erstmal eine Antwort verfasst, die auf die Frage einging

          Nicht wirklich. Du bist mit keinem Wort darauf eingegangen, dass setAkk_Tonika etwas anderes ist als SetAkk_Tonika.

          Du hast eine Anwort darauf verfasst, was du für Linuchs’ Frage gehalten hattest. Ich hingegen wollte erstmal wissen, was denn Linuchs’ Frage überhaupt ist.

          Kwakoni Yiquan

          --
          Ad astra per aspera
          1. Hallo,

            Ich hingegen wollte erstmal wissen, was denn Linuchs’ Frage überhaupt ist.

            Dann hättest du nachgefragt. Stattdessen hast du sie ihm inkorrekt beantwortet mit „Ja.“

            Gruß
            Kalk

            1. @@Tabellenkalk

              Ich hingegen wollte erstmal wissen, was denn Linuchs’ Frage überhaupt ist.

              Dann hättest du nachgefragt.

              Ähm:

              Du wolltest eigentlich fragen, ob das Erste dasselbe ist wie tonart.innerHTML = setAkk_Tonika?

              Na wenn das mal keine Nachfrage gewesen ist.

              Kwakoni Yiquan

              --
              Ad astra per aspera
              1. Hallo Gunnar,

                wenn er bis dahin überhaupt gelesen hat und nicht nach 3 Zeilen mit "leck mich doch" reagiert hat. Das war zumindest mein Gefühl beim Lesen der Antwort und das hat mein - getriggert.

                Mit einer Aussage wie "ich denke, du hast Dich bei set/Set vertippt. Und hast Du bei deiner Zuweisung an tonart tatsächlich das innerHTML vergessen?" wäre der Impact auf Linuchs' Nase deutlich geringer gewesen.

                Und danach hättest Du auf namentlichen Elementzugriff eingehen können (den ich gern im Wiki beschreiben täte, wenn mir dafür ein guter Platz einfallen würde).

                Rolf

                --
                sumpsi - posui - obstruxi
                1. Servus,

                  Und danach hättest Du auf namentlichen Elementzugriff eingehen können (den ich gern im Wiki beschreiben täte, wenn mir dafür ein guter Platz einfallen würde).

                  Evtl. hier: JavaScript/Tutorials/DOM/Was_ist_das_DOM#Elementknoten_ansprechen

                  Herzliche Grüße

                  Matthias Scharwies

                  --
                  Die Signatur findet sich auf der Rückseite des Beitrags.
                2. @@Rolf B

                  Mit einer Aussage wie "ich denke, du hast Dich bei set/Set vertippt. Und hast Du bei deiner Zuweisung an tonart tatsächlich das innerHTML vergessen?" wäre der Impact auf Linuchs' Nase deutlich geringer gewesen.

                  Der Unterschied zwischen „du hast dich vertippt?“/„du hast … vergessen?“ und „das ist deine Schussligkeit?“ liegt im Auge des Betrachters.

                  Und danach hättest Du auf namentlichen Elementzugriff eingehen können

                  Ich war dabei.

                  Zunächst galt es aber, die Missverständnisse auszuräumen – bevor andere auch noch darüber stolpern. Deshalb halte ich es nach wie vor für richtig, mein erstes Posting rausgeschickt zu haben.

                  Dann hatte ich ein Online-Beispiel erstellt, um zu prüfen, ob sich verschiedene Browser da überhaupt gleich verhalten. Auch das wäre Linuchs’ Aufgabe gewesen.

                  Dann hatte ich die Spec gewälzt, aber du bist mir da zuvorgekommen.

                  Kwakoni Yiquan

                  --
                  Ad astra per aspera
                  1. Hallo Gunnar,

                    Der Unterschied … liegt im Auge des Betrachters

                    Oder in der Wortwahl. Ich bin da von mehreren Generationen Softwaretestern „erzogen“ worden, die ich früher wegen ihrer schlecht formulierten Tickets zur Sau gemacht habe… Was heute immer noch gerne bei Projektabenden als Anekdote kommt 🙄

                    Deshalb halte ich es nach wie vor für richtig, mein erstes Posting rausgeschickt zu haben.

                    Inhaltlich: definitiv ja.

                    Ein Hinweis, dass Du noch etwas recherchierst und Dich dann meldest, wäre nützlich gewesen, aber sowas vergesse ich auch gerne.

                    Rolf

                    --
                    sumpsi - posui - obstruxi
                3. @@Rolf B

                  mit "leck mich doch" reagiert

                  Zu so einer Reaktion würde sich hier doch niemand – schon gar nicht ein Stammposter – hinreißen lassen. Oder? Oder? 😆

                  Kwakoni Yiquan

                  --
                  Ad astra per aspera
          2. Hallo Gunnar,

            den s/S Fehler habe ich nicht beachtet. Und wenn, dann hätte ich das wohl auf einen Tippfehler beim Schreiben der Frage geschoben.

            Berechtigt nachdenken kann man über die Frage, ob Linuchs übersehen hat, dass eine Zuweisung an tonart und an das tonart.innerHTML ein relevanter Unterschied ist. Das hab ich ihm allerdings nicht zugetraut und es für eine Schusseligkeit bei der Frage gehalten.

            Rolf

            --
            sumpsi - posui - obstruxi
  2. Hallo Linuchs,

    jein.

    Zu jeder ID gibt es eine globale Variable im window-Objekt. Das ist ein Kompatibilitätsfeature aus den 90ern, das es in den HTML Standard geschafft hat:

    Hier.

    Wenn, sollte man aber window.tonart nehmen. Denn blindlings an tonart zuzuweisen kann im Strikten Modus auf einen ReferenceError laufen, wenn es das Element nicht gibt. Es kann auch zu anderen Crashs führen, falls Du eine lokale Variable tonart hast und diese damit überschreibst.

    Schlimmer noch: eine ID, die heute noch nicht Name einer window-Eigenschaft oder Methode ist, kann es morgen sein. Ständig kommt irgendwas hinzu. Und dann crasht auf einmel deine Seite und keiner weiß, warum.

    Besser ist es aus meiner Sicht, mit der querySelector-Fassung zu arbeiten. Dann fragt sich keiner, wo die Variable herkommt.

    Etwas anders ist es bei Formularelementen (was ein span nicht ist und nicht sein kann), die kann man über document.forms.formname.elementid ansprechen – sofern entsprechende Namen vorliegen.

    Rolf

    --
    sumpsi - posui - obstruxi
  3. <html>
        <span id="tonart">Dur</span>
        <script>
            tonart.innerHTML="Moll";
        </script>
    </html>
    

    → Moll

    Ja. Das ist schon länger bekannt.

    1. Hallo,

      <html>
          <span id="tonart">Dur</span>
          <script>
              tonart.innerHTML="Moll";
          </script>
      </html>
      

      → Moll

      Ja. Das ist schon länger bekannt.

      mir wäre das neu. Moll/Dur sind Tongeschlechter, keine -arten...

      Gruß
      Kalk

    2. <html>
          <span id="tonart">Dur</span>
          <script>
              tonart.innerHTML="Moll";
          </script>
      </html>
      

      → Moll

      Ach so. Eigentlich ist es nicht tonart, sondern window.tonart … JS durchsucht also ohne Anweisung das window-Object, ob darin eine Eigenschaft namens „tonart“ registiert (und mit einem Objekt mit der Eigenschaft innerHTML belegt) ist:

      tonart.innerHTML="Moll";
      window.tonart.innerHTML="Moll";
      window['tonart'].innerHTML="Moll";
      window['tonart']['innerHTML']="Moll";
      

      führen also zu identischem Ergebnis. Es handelt ich um sowas wie einen Suchpfad, das kleine Männchen im Rechner hat also folgende

      Anweisung 0815:

      Gibt es ein Objekt nicht, schau im Superobjekt window nach.

      Teile davon mag ich wegen der Unklarheiten/Konkurrenzen im Namespace nicht. Irgendjemand kann ja mal messen, was schneller ist.