Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.javascript > #4656
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Newsgroups | de.comp.lang.javascript |
| Subject | Re: Browsereinstellungen abfragen: Die Lösung |
| Date | 2015-07-29 23:49 +0200 |
| Organization | PointedEars Software (PES) |
| Message-ID | <1977000.ilC4Ou9lg9@PointedEars.de> (permalink) |
| References | <201507282031.a15627@b.maus.de> <201507290149.a16208@b.maus.de> |
Axel Berger wrote:
> Noch einmal vielen Dank an alle Helfer. Diese Lösung funktioniert jetzt:
Wie willst ausgerechnet Du das beurteilen können? „Funktioniert“ heisst im
Web und vor allem bei einer Skriptsprache _nicht_ „funktioniert *heute* in
*meinem/-n* *Browser(n)*“.
> http://www.hermann-riemann.de/u/fremd.b.js
> function fett() {
> var btag, utag, farbe;
Nicht-englische Bezeichner sind pfui[tm].
> btag = document.getElementById('center').getElementsByTagName("b");
> utag = document.getElementById('center').getElementsByTagName("u");
> // alert (btag);
// window.alert(btag);
> if (window.getComputedStyle)
Wie bereits geschrieben: Es muss „document.defaultView.getComputedStyle“
heissen, wenn man kompatibel bleiben will. Etwas ältere Safari-Versionen
zum Beispiel unterstützen nur das und weder window.getComputedStyle() …
> farbe = window.getComputedStyle(btag[0],null).backgroundColor;
> else if (btag[0].currentStyle)
… noch diesen, _nicht_ 100 % äquivalenten, Fallback für IE < 9 und IE 9
im IE < 9 Document Mode.
Die nötigen Tests zur Laufzeit fehlen hier oder sind unzureichend.
- AISB: Methoden von Host-Objekten, wie “getComputedStyle”, dürfen
nicht und sollten nicht nur einem einfachen typkonvertierenden Test
unterzogen werden, sondern müssen auf voraussichtliche Funktionalität
getestet werden. Siehe jsx.object.isHostMethod().
- der Feature-Test für document.getElementById(…) fe lt;
- der Feature-Test für Element::getElementsByTagName(…) fe lt;
- der Test für btab[0] fe lt
> farbe = btag[0].currentStyle.backgroundColor;
In einem allgemeinen Script muss man hier auch mindestens Hintergrundbilder
berücksichtigen.
> // alert (farbe);
// window.alert(farbe);
Im 21. Jahrhundert kennt man ausserdem „console.log(…)“ usw.:
<http://devtoolsecrets.com/>
> if (farbe != 'transparent') {
In der Regel wird die Farbe von getComputedStyle() in "rgb(…)"- oder
"rgba(…)"-Notation zurückgegeben; der Rückgabewert für Transparenz ist dann
in der Regel "rgba(0, 0, 0, 0)", wobei die Whitespaces optional sind. Wenn
man es kompatibel abfangen will, muss man diesen Teil der CSS-Spezifikation
parsen [es könnte nämlich auch "rgba(0%, 0%, 0%, 0.0)" sein].
Und die transparente Hintergrundfarbe eines Kind-Elements sagt noch nichts
über seine Deckkraft (opacity) und die Transparenz und Deckkraft seiner
Vorfahren-Elemente aus…
> for (var di=0;di<btag.length;di++) {
Besser:
for (var di = 0, len = btag.length; di < len; ++di) {
- Eigenschaften, deren Wert sich voraussichtlich nicht ändert, müssen nicht
bei jedem Schleifendurchlauf abgefragt werden. Dies dann nicht zu tun,
erhöht *erheblich* die Effizienz von Programmen.
- Pre-Inkrement ist tendenziell effizienter als Post-Inkrement, wenn man
den alten Wert nicht braucht, da dieser dann nicht gespeichert werden
muss.
Spielt ausserdem die Reihenfolge keine Rolle, kann effizienter rückwärts
iteriert werden:
for (var di = btag.length; di--;) {
“di” ist ein ungewöhnlicher Bezeichner für einen Zähler; entweder sollte aus
dem Bezeichner erkennbar sein, was hier “d” sein soll, oder er sollte
schlicht “i” sein (für tiefer verschachtelte Schleifen dann, “j”, “k”, usw.)
> btag[di].style.fontStyle = 'normal';
> btag[di].style.fontWeight = 'normal';
> };
> for (var di=0;di<utag.length;di++) {
Siehe oben.
> utag[di].style.fontStyle = 'normal';
> utag[di].style.fontWeight = 'normal';
> utag[di].style.textDecoration = 'none';
Wenn auf ein Objekt in einer Liste oder Collection mehrfach zugegriffen
wird, ist es effizienter, die Referenz in einer Variablen zu speichern.
Es ergibt sich automatisch, dass der Bezeichner für die Listen-/Collection-
Referenz im Plural stehen sollte:
var utag = utags[di];
utag.style.fontStyle = 'normal';
utag.style.fontWeight = 'normal';
utag.style.textDecoration = 'none';
Inzwischen (Opera < 9 ist tot) dürfte es sogar vertretbar sein,
var utag_style = utags[di].style;
utag_style.fontStyle = 'normal';
utag_style.fontWeight = 'normal';
utag_style.textDecoration = 'none';
zu schreiben. Allerdings kann man sich überlegen, dass man dies immer
wieder brauchen wird, und eine Methode schreiben, wie sie einige
Bibliotheken mitbringen und wie ich es gestern auch getan habe:
jsx.dom.setStyle(utags[di], {
"font-style": "normal",
"font-weight": "normal",
"text-decoration": "none"
});
(Schamlos geklaut von jQuery’s .css(…), und verbessert :))
> }
> }
> }
>
> Thomas, Du findest hier bestimmt viel verbesserungsfähiges. Javascript
> (das es außer im Namen dieser Gruppe nicht gibt)
Im Namen dieser Gruppe gibt es kein „Javascript“. Dass darin “javascript”
steht, hat allein Usenet-technische Gründe: Die Namen *aller* Newsgroups
werden mit kleinen Buchstaben geschrieben. Relevant sind die Tagline, die
Charta und die *d*cljs-FAQ, und auch dort wirst Du kein „Javascript“ finden;
wohl aber „JavaScript“. (In der cljs-FAQ gibt es “javascript” nur aus
[maintainer-]hyster^Whistorischen Gründen; hoffentlich aber nicht mehr
lange.)
Auf die Gross-/Klein-Schreibung kommt es aber nicht so sehr an wie auf das,
was damit fälschlicherweise ausgesagt wird: Es gäbe nur eine, in allen
Umgebungen gleiche, Skriptsprache dieses Namens.
Hausaufgabe: <http://PointedEars.de/es-matrix> ff. sinnentnehmend lesen.
(Aber man kann sich den Mund fusselig reden, irgendein Idiot wird immer
weiter auf der Gross-/Klein-Schreibung herumreiten, anstatt das eigene,
tieferliegende Miss- und Unverständnis zu erkennen.)
> ist eine Sprache, die ich kaum bis gar nicht beherrsche.
Keine Ahnung auf einem bestimmten Gebiet scheint bei vielen die ideale
Voraussetzung zu sein, komplexe Probleme auf genau diesem Gebiet lösen und
Problemlösungen anderer dazu verstehen zu können. [psf 4.3]
--
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.
Back to de.comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar
Re: Browsereinstellungen abfragen: Die Lösung Axel_Berger@b.maus.de (Axel Berger) - 2015-07-29 01:49 +0200
Re: Browsereinstellungen abfragen: Die Lösung Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-07-29 23:49 +0200
Re: Browsereinstellungen abfragen: Die Lösung Holger Jeromin <news01_2009@katur.de> - 2015-07-30 13:28 +0200
Re: Browsereinstellungen abfragen: Die Lösung Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-07-30 16:45 +0200
Re: Browsereinstellungen abfragen: Die Lösung Holger Jeromin <news01_2009@katur.de> - 2015-07-30 17:28 +0200
Re: Browsereinstellungen abfragen: Die Lösung Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-07-30 17:47 +0200
Re: Browsereinstellungen abfragen: Die Lösung Axel_Berger@b.maus.de (Axel Berger) - 2015-07-30 20:22 +0200
Re: Browsereinstellungen abfragen: Die Lösung Holger Jeromin <news01_2009@katur.de> - 2015-07-31 11:10 +0200
Re: Browsereinstellungen abfragen: Die Lösung Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-07-31 16:36 +0200
Re: Browsereinstellungen abfragen: Die Lösung Holger Jeromin <news01_2009@katur.de> - 2015-07-31 17:01 +0200
Re: Browsereinstellungen abfragen: Die Lösung Holger Jeromin <news01_2009@katur.de> - 2015-08-03 14:38 +0200
Re: Browsereinstellungen abfragen: Die Lösung Axel_Berger@b.maus.de (Axel Berger) - 2015-07-30 11:21 +0200
Re: Browsereinstellungen abfragen: Die Lösung Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-07-30 22:19 +0200
Re: Browsereinstellungen abfragen: Die Lösung Axel_Berger@b.maus.de (Axel Berger) - 2015-07-30 12:01 +0200
Re: Browsereinstellungen abfragen: Die Lösung Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-07-30 22:23 +0200
csiph-web