Merkwürdig: Eine HTML-id ist in JS als Objekt bekannt?
Linuchs
- html
- javascript
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
@@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
@@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.
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
Hallo JürgenB,
stehst Du hinter Gunnars Art, mit Fragestellern umzugehen?
Rolf
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
@@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
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
@@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
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
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
@@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
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
@@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
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
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
<html>
<span id="tonart">Dur</span>
<script>
tonart.innerHTML="Moll";
</script>
</html>
→ Moll
Ja. Das ist schon länger bekannt.
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
<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.