Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.javascript > #4689 > unrolled thread

Schleife für document.getElementBy ... innerHTML?

Started byMaik Koenig <usenetspam@maikkoenig.de>
First post2015-08-12 01:02 +0200
Last post2015-08-14 08:35 +0200
Articles 17 — 5 participants

Back to article view | Back to de.comp.lang.javascript


Contents

  Schleife für document.getElementBy ... innerHTML? Maik Koenig <usenetspam@maikkoenig.de> - 2015-08-12 01:02 +0200
    Re: Schleife für document.getElementBy ... innerHTML? Maik Koenig <usenetspam@maikkoenig.de> - 2015-08-12 01:07 +0200
    Re: Schleife für document.getElementBy ... innerHTML? "Christoph M. Becker" <cmbecker69@arcor.de> - 2015-08-12 01:34 +0200
      Re: Schleife für document.getElementBy ... innerHTML? Maik Koenig <usenetspam@maikkoenig.de> - 2015-08-12 22:29 +0200
    Re: Schleife für document.getElementBy ... innerHTML? Sascha Hüdepohl <sascha@ravenworks.de> - 2015-08-12 09:33 +0200
      Re: Schleife für document.getElementBy ... innerHTML? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-08-12 15:44 +0200
        Re: Schleife für document.getElementBy ... innerHTML? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-08-12 15:47 +0200
        Re: Schleife für document.getElementBy ... innerHTML? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-08-12 16:18 +0200
        Re: Schleife für document.getElementBy ... innerHTML? Stefan Reuther <stefan.news@arcor.de> - 2015-08-12 19:18 +0200
          Re: Schleife für document.getElementBy ... innerHTML? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-08-12 20:54 +0200
            Re: Schleife für document.getElementBy ... innerHTML? Stefan Reuther <stefan.news@arcor.de> - 2015-08-13 20:09 +0200
      Re: Schleife für document.getElementBy ... innerHTML? Maik Koenig <usenetspam@maikkoenig.de> - 2015-08-12 22:42 +0200
        Re: Schleife für document.getElementBy ... innerHTML? Sascha Hüdepohl <sascha@ravenworks.de> - 2015-08-13 08:54 +0200
          Re: Schleife für document.getElementBy ... innerHTML? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-08-13 12:35 +0200
        Re: Schleife für document.getElementBy ... innerHTML? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-08-13 12:32 +0200
          Re: Schleife für document.getElementBy ... innerHTML? Maik Koenig <usenetspam@maikkoenig.de> - 2015-08-13 22:50 +0200
            Re: Schleife für document.getElementBy ... innerHTML? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-08-14 08:35 +0200

#4689 — Schleife für document.getElementBy ... innerHTML?

FromMaik Koenig <usenetspam@maikkoenig.de>
Date2015-08-12 01:02 +0200
SubjectSchleife für document.getElementBy ... innerHTML?
Message-ID<mqe5us.4jk.1@mid.maikkoenig.de>
Servus!

Ich muss vorweg schicken, dass ich bei JavaScript eher als Idiot
einzustufen bin, also bitte nicht zu sehr schlagen wenn die Antwort
offensichtlich ist :).

Problemstellung:

Ich habe ein JavaScript in dem u.A. reichlich Variablen a la "FooBar1",
"FooBar2" etc mit Inhalten befüllt werden. Die sollen jetzt ins Dokument
geschrieben werden und zwar dort wo die entsprechende ID innerhalb des
Dokuments auftaucht:

document.getElementById('FooBar1').innerHTML = FooBar1;

Das funktioniert natürlich so wie es soll, aber ich hatte gehofft es
gäbe eine einfachere Lösung statt das für jede Variable einzelnd
aufzuschreiben.

Wenn ich folgendes mache:

      var xx = document.querySelectorAll('td.FooBar');
      for (var i = 0; i < xx.length; i++) {....}

bekomme ich zwar alle entsprechenden Elemente, aber darin enthalten sind
natürlich nicht deren IDs. Gibt es eine Möglichkeit die IDs der mit
querySelectorAll erfassten HTML-Elemente zu erfahren und dann selbige
mit ihren Pendants aus dem Script zu füttern?

Ich dachte an sowas:

document.getElementByID(xx[i])innerHTML = xx[i];}

Aber mit dem was ich da oben veranstalte funktioniert das natürlich
nicht. Ideen? Oder besser noch: Ein Tritt in die richtige Stelle damit
ich selbst auf die Lösung kommen kann?

Danke im Vorraus!

Greetz,
MK
-- 

[toc] | [next] | [standalone]


#4690

FromMaik Koenig <usenetspam@maikkoenig.de>
Date2015-08-12 01:07 +0200
Message-ID<mqe67u.4jk.1@mid.maikkoenig.de>
In reply to#4689
Am 12.08.2015 um 01:02 schrieb Maik "Ingrid" Koenig:

> Wenn ich folgendes mache:
> 
>       var xx = document.querySelectorAll('td.FooBar');
>       for (var i = 0; i < xx.length; i++) {....}

Da muss ich hinzufügen, das ALLE entsprechenden Elemente mit den
durchnummerierten IDs dieselbe Klasse haben (class="FooBar"). Nicht das
es da Missverständnisse gibt.

Greetz,
MK
-- 
blog.maikkoenig.de  //  Des Wahnsinns fette Beute.

[toc] | [prev] | [next] | [standalone]


#4691

From"Christoph M. Becker" <cmbecker69@arcor.de>
Date2015-08-12 01:34 +0200
Message-ID<mqe0pi$61t$1@solani.org>
In reply to#4689
Am 12.08.2015 um 01:02 schrieb Maik Koenig:

> Wenn ich folgendes mache:
> 
>       var xx = document.querySelectorAll('td.FooBar');
>       for (var i = 0; i < xx.length; i++) {....}
> 
> bekomme ich zwar alle entsprechenden Elemente, aber darin enthalten sind
> natürlich nicht deren IDs. Gibt es eine Möglichkeit die IDs der mit
> querySelectorAll erfassten HTML-Elemente zu erfahren und dann selbige
> mit ihren Pendants aus dem Script zu füttern?
> 
> Ich dachte an sowas:
> 
> document.getElementByID(xx[i])innerHTML = xx[i];}
> 
> Aber mit dem was ich da oben veranstalte funktioniert das natürlich
> nicht. Ideen? Oder besser noch: Ein Tritt in die richtige Stelle damit
> ich selbst auf die Lösung kommen kann?

Du kannst die ID des jeweiligen Elements in der Schleife per xx[i].id
abrufen.  Reicht der Tritt? :)

-- 
Christoph M. Becker

[toc] | [prev] | [next] | [standalone]


#4700

FromMaik Koenig <usenetspam@maikkoenig.de>
Date2015-08-12 22:29 +0200
Message-ID<mqghcl.5dc.1@mid.maikkoenig.de>
In reply to#4691
Am 12.08.2015 um 01:34 schrieb Christoph M. Becker:
> Am 12.08.2015 um 01:02 schrieb Maik Koenig:
> 
>> Wenn ich folgendes mache:
>> 
>>       var xx = document.querySelectorAll('td.FooBar');
>>       for (var i = 0; i < xx.length; i++) {....}
>> 
>> bekomme ich zwar alle entsprechenden Elemente, aber darin enthalten sind
>> natürlich nicht deren IDs. Gibt es eine Möglichkeit die IDs der mit
>> querySelectorAll erfassten HTML-Elemente zu erfahren und dann selbige
>> mit ihren Pendants aus dem Script zu füttern?
>> 
>> Ich dachte an sowas:
>> 
>> document.getElementByID(xx[i])innerHTML = xx[i];}
>> 
>> Aber mit dem was ich da oben veranstalte funktioniert das natürlich
>> nicht. Ideen? Oder besser noch: Ein Tritt in die richtige Stelle damit
>> ich selbst auf die Lösung kommen kann?
> 
> Du kannst die ID des jeweiligen Elements in der Schleife per xx[i].id
> abrufen.  Reicht der Tritt? :)

Jein.

Jetzt bekomme ich zwar die IDs der Elemente, aber darüber nicht den
Inhalt der gleichnamigen Variablen. Hm...

Greetz,
MK
-- 
blog.maikkoenig.de  //  Des Wahnsinns fette Beute.

[toc] | [prev] | [next] | [standalone]


#4692

FromSascha Hüdepohl <sascha@ravenworks.de>
Date2015-08-12 09:33 +0200
Message-ID<20150812093317.00f07bc8@ravenworks.netz>
In reply to#4689
Hallo!

Maik Koenig <usenetspam@maikkoenig.de> schrieb:

> Ich habe ein JavaScript in dem u.A. reichlich Variablen a la
> "FooBar1", "FooBar2" etc mit Inhalten befüllt werden. Die sollen
> jetzt ins Dokument geschrieben werden und zwar dort wo die
> entsprechende ID innerhalb des Dokuments auftaucht:

Das Problem dabei ist an die Namen der Variablen zu kommen.

Wenn Du die Variablen alle nach dem gleichen Schema benannt hast und
sie global sind, dann könnte folgendes funtionieren:

var target, i;
for (i = 0; i < 10; i += 1) {
  if (window['FooBar' + i]) {
    target = document.getElementById('FooBar' + i);
    if (target) {
      target.textContent = window['FooBar' + i];
    }
  }
}


Schöner fände ich es wenn die Variablen in einem Container
zusammengefasst sind:

var
  i, target,
  vars = {
    fooBar1: 'wert 1',
    fooBar2: 'wert 2',
    andererName: 'wert 3'
  };

for (i in vars) {
  if (vars.hasOwnProperty(i)) {
    target = document.getElementById(i);
    if (target) {
     target.textContent = = vars[i];
    }
  }
}

http://plnkr.co/edit/bJHVA6U6mg6ubFdkHR28?p=preview

HTH
Sascha

[toc] | [prev] | [next] | [standalone]


#4693

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2015-08-12 15:44 +0200
Message-ID<5808078.Mu2qdKNV6c@PointedEars.de>
In reply to#4692
Sascha Hüdepohl wrote:

> Maik Koenig <usenetspam@maikkoenig.de> schrieb:
>> Ich habe ein JavaScript in dem u.A. reichlich Variablen a la
>> "FooBar1", "FooBar2" etc mit Inhalten befüllt werden. Die sollen
>> jetzt ins Dokument geschrieben werden und zwar dort wo die
>> entsprechende ID innerhalb des Dokuments auftaucht:
> 
> Das Problem dabei ist an die Namen der Variablen zu kommen.
> 
> Wenn Du die Variablen alle nach dem gleichen Schema benannt hast und
> sie global sind, dann könnte folgendes funtionieren:
> 
> var target, i;
> for (i = 0; i < 10; i += 1) {
>   if (window['FooBar' + i]) {
>     target = document.getElementById('FooBar' + i);
>     if (target) {
>       target.textContent = window['FooBar' + i];
> […]

Nein, sondern

  target.textContent = this['FooBar' + i];

bzw. im lokalen Kontext oder Node.js

  target.textContent = global['FooBar' + i];

wobei man sich ohne Node.js das “global” mit

  var global = this;

im globalen Kontext selbst bauen muss.

<Gebetsmühle>

window != global.  Das mit “window” referenzierte Host-Objekt hat spezielle 
Eigenschaften, die das in ECMAScript spezifizierte globale Objekt nicht hat.  
Wer diese beiden Objekte verwechselt, muss sich nicht wundern, wenn Dinge 
passieren, die er nicht möchte.  Zum Beispiel wäre es bei diesem Ansatz 
fatal, wenn eine der globalen Variablen “location” hiesse: eine Zuweisung an 
die gleichnamige Eigenschaft von “window” löst eine Navigation aus.

</Gebetsmühle>

> Schöner fände ich es wenn die Variablen in einem Container
> zusammengefasst sind:

Das ist nicht nur eleganter, sondern auch weniger fehlerträchtig.

> var
>   i, target,
>   vars = {
>     fooBar1: 'wert 1',
>     fooBar2: 'wert 2',
>     andererName: 'wert 3'
>   };
> 
> for (i in vars) {
>   if (vars.hasOwnProperty(i)) {
>     target = document.getElementById(i);
>     if (target) {
>      target.textContent = = vars[i];
                            ^
| Uncaught SyntaxError: Unexpected token =

>     }
>   }
> }

Vermutlich effizienter:

  Object.keys(vars).forEach(function (key) {
    var target = document.getElementById(i);
    if (target) target.textContent = this[key];
  }, vars);

Oder

  vars = Object.create(null, {
    fooBar1: {value: 'wert 1', enumerable: true},
    fooBar2: {value: 'wert 2', enumerable: true},
    andererName: {value: 'wert 3', enumerable: true}
  });

dann kann man sich das vars.hasOwnProperty(…) sparen, weil das referenzierte 
Objekt keine Eigenschaften erbt.

Erfordert aber jeweils eine Implementierung/Emulation von ES 5+.  Siehe auch 
jsx.object.createDataObject() (zukünftig deprecated zugunsten von 
jsx.object.createDataObject()) usw. 
<http://PointedEars.de/wsvn/JSX/trunk/object.js>

Übrigens gibt es schon JS/ES-basierte Template-Engines.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4695

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2015-08-12 15:47 +0200
Message-ID<2123967.kxT4jObxOY@PointedEars.de>
In reply to#4693
Thomas 'PointedEars' Lahn wrote:

>   Object.keys(vars).forEach(function (key) {
>     var target = document.getElementById(i);

      var target = document.getElementById(key);

>     if (target) target.textContent = this[key];
>   }, vars);

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4696

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2015-08-12 16:18 +0200
Message-ID<2218548.MvuZSXvuf9@PointedEars.de>
In reply to#4693
Thomas 'Ingrid' Lahn wrote:

> Erfordert aber jeweils eine Implementierung/Emulation von ES 5+.  Siehe
> auch jsx.object.createDataObject() (zukünftig deprecated zugunsten von
> jsx.object.createDataObject()) usw.

Ja, nee, is’ klar.  Gemeint war: _jsx.object.getDataObject()_ soll zukünftig 
nicht mehr verwendet werden, weil es irgendwann durch 
jsx.object.createDataObject() ersetzt wird.  getDataObject() bzw. 
createDataObject() ist eine Factory, kein Getter, und sollte entsprechend 
benannt sein.

Ist das wieder heiss heute …

> <http://PointedEars.de/wsvn/JSX/trunk/object.js>

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4697

FromStefan Reuther <stefan.news@arcor.de>
Date2015-08-12 19:18 +0200
Message-ID<mqg66j.1bk.1@stefan.msgid.phost.de>
In reply to#4693
Thomas 'PointedEars' Lahn wrote:
> Sascha Hüdepohl wrote:
>>var target, i;
>>for (i = 0; i < 10; i += 1) {
>>  if (window['FooBar' + i]) {
>>    target = document.getElementById('FooBar' + i);
>>    if (target) {
>>      target.textContent = window['FooBar' + i];
>>[…]
> 
> Nein, sondern
> 
>   target.textContent = this['FooBar' + i];
[...]
> <Gebetsmühle>
> 
> window != global. Das mit “window” referenzierte Host-Objekt hat spezielle
> Eigenschaften, die das in ECMAScript spezifizierte globale Objekt nicht hat.  
> Wer diese beiden Objekte verwechselt, muss sich nicht wundern, wenn Dinge 
> passieren, die er nicht möchte.  Zum Beispiel wäre es bei diesem Ansatz 
> fatal, wenn eine der globalen Variablen “location” hiesse: eine Zuweisung an 
> die gleichnamige Eigenschaft von “window” löst eine Navigation aus.

Sofern wir in einem Browser sind, ist 'this === window'. Die Magie des
Objektes geht auch nicht weg, wenn man 'this' statt 'window' schreibt,
'this.location = "..."' löst ebenfalls eine Navigation aus.

>>Schöner fände ich es wenn die Variablen in einem Container
>>zusammengefasst sind:
> 
> Das ist nicht nur eleganter, sondern auch weniger fehlerträchtig.

Eben. Das muss der Weg sein. Nicht darum herumzuworkarounden, wie man
denn das globale Objekt bezeichnet.


  Stefan

[toc] | [prev] | [next] | [standalone]


#4698

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2015-08-12 20:54 +0200
Message-ID<2473063.o0E3eExaDO@PointedEars.de>
In reply to#4697
Stefan Reuther wrote:

> Thomas 'PointedEars' Lahn wrote:
>> window != global. Das mit “window” referenzierte Host-Objekt hat
>> spezielle Eigenschaften, die das in ECMAScript spezifizierte globale
>> Objekt nicht hat. Wer diese beiden Objekte verwechselt, muss sich nicht
>> wundern, wenn Dinge
>> passieren, die er nicht möchte.  Zum Beispiel wäre es bei diesem Ansatz
>> fatal, wenn eine der globalen Variablen “location” hiesse: eine Zuweisung
>> an die gleichnamige Eigenschaft von “window” löst eine Navigation aus.
> 
> Sofern wir in einem Browser sind, ist 'this === window'.

(Schon *oft* diskutiert und widerlegt.  Bitte erst lesen, dann denken, dann 
posten.)  Nein.  Aufgrund der Frames-Semantik ist nur die Unterscheidung 
nicht trivial möglich.

> Die Magie des Objektes geht auch nicht weg, wenn man 'this' statt 'window'
> schreibt, 'this.location = "..."' löst ebenfalls eine Navigation aus.

Die Aussage mag zwar kontextabhängig richtig sein (in der Console ist sie 
das beispielsweise nachweislich nicht), die Schlussfolgerung daraus aber
ist falsch.  Ein Objekt dient hier nur als Proxy für das andere, und als 
Sonderfall hat das eine Objekt (das globale) eine host-definierte 
Eigenschaft passenden Namens und Wertes (“window”).

> >>Schöner fände ich es wenn die Variablen in einem Container
> >>zusammengefasst sind:
> > 
> > Das ist nicht nur eleganter, sondern auch weniger fehlerträchtig.
> 
> Eben. Das muss der Weg sein. Nicht darum herumzuworkarounden, wie man
> denn das globale Objekt bezeichnet.

Was soll das?  Es geht nicht um die Bezeichnung, sondern um die weniger 
fehlerträchtige Referenzierung.  In *beiden* Fällen.
 
-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4704

FromStefan Reuther <stefan.news@arcor.de>
Date2015-08-13 20:09 +0200
Message-ID<mqitih.3u4.1@stefan.msgid.phost.de>
In reply to#4698
Thomas 'PointedEars' Lahn wrote:
> Stefan Reuther wrote:
>>Thomas 'PointedEars' Lahn wrote:
>>>window != global. Das mit “window” referenzierte Host-Objekt hat
>>>spezielle Eigenschaften, die das in ECMAScript spezifizierte globale
>>>Objekt nicht hat. Wer diese beiden Objekte verwechselt, muss sich nicht
>>>wundern, wenn Dinge
>>>passieren, die er nicht möchte.  Zum Beispiel wäre es bei diesem Ansatz
>>>fatal, wenn eine der globalen Variablen “location” hiesse: eine Zuweisung
>>>an die gleichnamige Eigenschaft von “window” löst eine Navigation aus.
>>
>>Sofern wir in einem Browser sind, ist 'this === window'.
> 
> (Schon *oft* diskutiert und widerlegt.  Bitte erst lesen, dann denken, dann 
> posten.)  Nein.  Aufgrund der Frames-Semantik ist nur die Unterscheidung 
> nicht trivial möglich.

Meine Browser antworten mir auf die Frage 'javascript:window===this' mit
'true'. Dass man das durch Instanziierung beliebig komplizierter
Dokumente und ggf. darin enthaltener Skripte ändern kann, ist wenig
überraschend.

>>Die Magie des Objektes geht auch nicht weg, wenn man 'this' statt 'window'
>>schreibt, 'this.location = "..."' löst ebenfalls eine Navigation aus.
> 
> Die Aussage mag zwar kontextabhängig richtig sein (in der Console ist sie 
> das beispielsweise nachweislich nicht), die Schlussfolgerung daraus aber
> ist falsch.  Ein Objekt dient hier nur als Proxy für das andere, und als 
> Sonderfall hat das eine Objekt (das globale) eine host-definierte 
> Eigenschaft passenden Namens und Wertes (“window”).

"Proxy".

Ich hätte ja gesagt, 'this' ist wie 'window' eine Referenz auf ein
bestimmtes Objekt, aber man kann natürlich auch neue Begriffe erfinden.

Was nichts daran ändert, dass die Magie des 'window'-Objektes nicht, wie
von dir suggeriert, weggeht, wenn man es als 'this' oder 'global'
referenziert.


  Stefan

[toc] | [prev] | [next] | [standalone]


#4699

FromMaik Koenig <usenetspam@maikkoenig.de>
Date2015-08-12 22:42 +0200
Message-ID<mqgi4r.ko.1@mid.maikkoenig.de>
In reply to#4692
Am 12.08.2015 um 09:33 schrieb Sascha Hüdepohl:
> Hallo!
> 
> Maik Koenig <usenetspam@maikkoenig.de> schrieb:
> 
>> Ich habe ein JavaScript in dem u.A. reichlich Variablen a la
>> "FooBar1", "FooBar2" etc mit Inhalten befüllt werden. Die sollen
>> jetzt ins Dokument geschrieben werden und zwar dort wo die
>> entsprechende ID innerhalb des Dokuments auftaucht:
> 
> Das Problem dabei ist an die Namen der Variablen zu kommen.
> 
> Wenn Du die Variablen alle nach dem gleichen Schema benannt hast und
> sie global sind, dann könnte folgendes funtionieren:
> 
> var target, i;
> for (i = 0; i < 10; i += 1) {
>   if (window['FooBar' + i]) {
>     target = document.getElementById('FooBar' + i);
>     if (target) {
>       target.textContent = window['FooBar' + i];
>     }
>   }
> }

Perfekt, das klappt, Danke!

Greetz,
MK
-- 
blog.maikkoenig.de  //  Des Wahnsinns fette Beute.

[toc] | [prev] | [next] | [standalone]


#4701

FromSascha Hüdepohl <sascha@ravenworks.de>
Date2015-08-13 08:54 +0200
Message-ID<20150813085440.71efb779@ravenworks.netz>
In reply to#4699
Maik Koenig <usenetspam@maikkoenig.de> schrieb:

> Am 12.08.2015 um 09:33 schrieb Sascha Hüdepohl:

> > var target, i;
> > for (i = 0; i < 10; i += 1) {
> >   if (window['FooBar' + i]) {
> >     target = document.getElementById('FooBar' + i);
> >     if (target) {
> >       target.textContent = window['FooBar' + i];
> >     }
> >   }
> > }
> 
> Perfekt, das klappt, Danke!

Jetz schäm ich mich ein bischen

[toc] | [prev] | [next] | [standalone]


#4703

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2015-08-13 12:35 +0200
Message-ID<1908815.vMXFiGW345@PointedEars.de>
In reply to#4701
Sascha Hüdepohl wrote:

> Maik Koenig <usenetspam@maikkoenig.de> schrieb:
>> Am 12.08.2015 um 09:33 schrieb Sascha Hüdepohl:
>> > var target, i;
>> > for (i = 0; i < 10; i += 1) {
>> >   if (window['FooBar' + i]) {
>> >     target = document.getElementById('FooBar' + i);
>> >     if (target) {
>> >       target.textContent = window['FooBar' + i];
>> >     }
>> >   }
>> > }
>> 
>> Perfekt, das klappt, Danke!
> 
> Jetz schäm ich mich ein bischen

Schlecht oder gar nicht getestete fehlerträchtige Schnellschüsse, die von 
Anfängern als „perfekt“ bezeichnet werden, sind etwas, für das man sich 
nicht nur ein bisschen schämen sollte.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4702

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2015-08-13 12:32 +0200
Message-ID<95996164.TSO6ZjPLRg@PointedEars.de>
In reply to#4699
Maik Koenig wrote:

> Am 12.08.2015 um 09:33 schrieb Sascha Hüdepohl:
>> Maik Koenig <usenetspam@maikkoenig.de> schrieb:
>>> Ich habe ein JavaScript in dem u.A. reichlich Variablen a la
>>> "FooBar1", "FooBar2" etc mit Inhalten befüllt werden. Die sollen
>>> jetzt ins Dokument geschrieben werden und zwar dort wo die
>>> entsprechende ID innerhalb des Dokuments auftaucht:
>> 
>> Das Problem dabei ist an die Namen der Variablen zu kommen.
>> 
>> Wenn Du die Variablen alle nach dem gleichen Schema benannt hast und
>> sie global sind, dann könnte folgendes funtionieren:
>> 
>> var target, i;
>> for (i = 0; i < 10; i += 1) {
>>   if (window['FooBar' + i]) {
>>     target = document.getElementById('FooBar' + i);
>>     if (target) {
>>       target.textContent = window['FooBar' + i];
>>     }
>>   }
>> }
> 
> Perfekt, das klappt, Danke!

Abgesehen von der bereits erwähnten Fehlerträchtigkeit aufgrund der 
Besonderheiten von “window” (unter anderem darf keine Variable so wie eine 
Eigenschaft von “window” heissen – das schliesst auch IDs und -Namen ein) 
klappt das genau so lange, wie der Variablenwert nicht zu “false” 
konvertiert wird, also nicht undefined, null, false, 0, NaN oder "" ist:

<http://ecma-international.org/ecma-262/5.1/#sec-9.2>

„Perfekt“ ist daher etwas anderes.

Und wie gesagt: Du erfindest hier das Rad schlechter neu.


PointedEars
-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4705

FromMaik Koenig <usenetspam@maikkoenig.de>
Date2015-08-13 22:50 +0200
Message-ID<mqj6vi.7nk.1@mid.maikkoenig.de>
In reply to#4702
Am 13.08.2015 um 12:32 schrieb Thomas 'PointedEars' Lahn:
> Maik Koenig wrote:
> 
>> Am 12.08.2015 um 09:33 schrieb Sascha Hüdepohl:
>>> Maik Koenig <usenetspam@maikkoenig.de> schrieb:
>>>> Ich habe ein JavaScript in dem u.A. reichlich Variablen a la
>>>> "FooBar1", "FooBar2" etc mit Inhalten befüllt werden. Die sollen
>>>> jetzt ins Dokument geschrieben werden und zwar dort wo die
>>>> entsprechende ID innerhalb des Dokuments auftaucht:
>>> 
>>> Das Problem dabei ist an die Namen der Variablen zu kommen.
>>> 
>>> Wenn Du die Variablen alle nach dem gleichen Schema benannt hast und
>>> sie global sind, dann könnte folgendes funtionieren:
>>> 
>>> var target, i;
>>> for (i = 0; i < 10; i += 1) {
>>>   if (window['FooBar' + i]) {
>>>     target = document.getElementById('FooBar' + i);
>>>     if (target) {
>>>       target.textContent = window['FooBar' + i];
>>>     }
>>>   }
>>> }
>> 
>> Perfekt, das klappt, Danke!
> 
> Abgesehen von der bereits erwähnten Fehlerträchtigkeit aufgrund der 
> Besonderheiten von “window” (unter anderem darf keine Variable so wie eine 
> Eigenschaft von “window” heissen – das schliesst auch IDs und -Namen ein)

Also die Namen der Variablen schliessen das praktisch aus.

> klappt das genau so lange, wie der Variablenwert nicht zu “false” 
> konvertiert wird, also nicht undefined, null, false, 0, NaN oder "" ist:

Das muss ich vorab ohnehin abfangen, da die Variablenwerte nachfolgend
für Berechnungen benutzt werden sollen. Und "NaN" und ähnliches wäre als
Ergebnis sehr irritierend.

> „Perfekt“ ist daher etwas anderes.

Man kann Haare spalten, ja. Muss man aber nicht wenn man es nicht braucht.

> Und wie gesagt: Du erfindest hier das Rad schlechter neu.

Es tut was es soll, es dreht sich ohne Ruckler.

Greetz,
MK
-- 
blog.maikkoenig.de  //  Des Wahnsinns fette Beute.

[toc] | [prev] | [next] | [standalone]


#4706

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2015-08-14 08:35 +0200
Message-ID<3685711.G1Gi30AsMo@PointedEars.de>
In reply to#4705
Maik Koenig wrote:

> Am 13.08.2015 um 12:32 schrieb Thomas 'PointedEars' Lahn:
>> Abgesehen von der bereits erwähnten Fehlerträchtigkeit aufgrund der
>> Besonderheiten von “window” (unter anderem darf keine Variable so wie
>> eine Eigenschaft von “window” heissen – das schliesst auch IDs und -Namen
>> ein)
> 
> Also die Namen der Variablen schliessen das praktisch aus.

Du weisst nie, welche Eigenschaften das mit “window” referenzierte
Host-Objekt hat und was eine Zuweisung an sie bewirkt.

Manche Leute werden erst durch Schaden klug.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [standalone]


Back to top | Article view | de.comp.lang.javascript


csiph-web