• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] document.write

Otternaut

New member
Hallo,

ich bin noch neu hier und hoffe die Frage ist im richtigen Foren-Bereich gestellt. Ich arbeite derzeit ein Einsteiger-Buch zu Javascript durch. Allerdings verstehe ich eine Stelle nicht. Ich schreib einfach mal den Code hier herein:

HTML:
var aus = "";
if("ist keiner".match(/[km]eine/)) aus += "1: ist keiner<br>";
if("ist meiner".match(/[km]eine/)) aus += "1: ist meiner<br>";
if("ist seiner".match(/[km]eine/)) aus += "1: ist seiner<br>";

if("ist an".match(/(an|aus)/)) aus += "2: ist an<br>";
if("ist aus".match(/(an|aus)/)) aus += "2: ist aus<br>";
if("ist nicht".match(/(an|aus)/)) aus += "2: ist nicht<br>";

if("ist An".match(/ist an/i)) aus += "3: ist An<br>";
if("Ist an".match(/ist an/i)) aus += "3: Ist an<br>";
if("ist Aus".match(/ist an/i)) aus += "3: ist Aus<br>";

document.write(aus);

Mir stellt sich die Frage: Warum schreibt der Autor nur ein einziges mal document.write(aus) am Ende des Codes? Eigentlich überschreiben die Schleifen den Wert von aus nacheinander, oder? Kann mir das jemand erklären?

Grüße,
Otternaut
 
Zuletzt bearbeitet von einem Moderator:
Hi,

herzlich willkommen bei uns und ja, du bist im richtigen Foren-Bereich gelandet.

Das sind aber keine Schleifen, dass sind IF-Statements (SELFHTML: JavaScript / Sprachelemente / Bedingte Anweisungen (if-else/switch)). Der Autor prüft hier verschiedene Dinge ab und schreibt jenachdem was zutrifft verschiedene Werte in die Variable "aus". Am Ende des Scripts gibt er diesen Wert, welchen er in einem der IF-Statements zugewiesen hat, aus. Er könnte die Ausgabe auch pro IF machen, aber document.write() ist teuer und das Script würde dann entsprechend länger brauchen. Abgesehen davon ist es lesbarer und einfach schöner.
 
Ah cool danke dir! Also kann man mit Hilfe von If-Statements mehrere Werte in der Variablen speichern oder verstehe ich das falsch?

Grüße
 
müsste ja rauskommen:

"xy"
Wenn du davor ein var aus = ""; schreibst, ja.

Wenn davor nur ein var aus steht, kommt "undefinedxy" raus und wenn du gar nichts davor schreibst, kommt ein ReferenceError in der Fehlerkonsole.

PS: als Anfänger würde ich document.write() wieder vergessen. Macht mehr Ärger als es wert ist. Schau' dir lieber gleich .innerHTML an:
Code:
<!DOCTYPE html>

<html>
<head>
<title>Fenstertitel</title>
</head>
<body>
<script type="text/javascript">
(function(){
	var aus = "";
	if ("ist keiner".match(/[km]eine/)){
		aus += "1: ist keiner<br>";
	}
	if ("ist meiner".match(/[km]eine/)){
		aus += "1: ist meiner<br>";
	}
	if ("ist seiner".match(/[km]eine/)){
		aus += "1: ist seiner<br>";
	}

	if ("ist an".match(/(an|aus)/)){
		aus += "2: ist an<br>";
	}
	if ("ist aus".match(/(an|aus)/)){
		aus += "2: ist aus<br>";
	}
	if ("ist nicht".match(/(an|aus)/)){
		aus += "2: ist nicht<br>";
	}

	if ("ist An".match(/ist an/i)){
		aus += "3: ist An<br>";
	}
	if ("Ist an".match(/ist an/i)){
		aus += "3: Ist an<br>";
	}
	if ("ist Aus".match(/ist an/i)){
		aus += "3: ist Aus<br>";
	}

	document.body.innerHTML = aus;
}());

</script>
</body>
</html>
 
Da der Code von Otternaut, den er ausgeben will, keinen ausführbaren Code enthält, aber html-tags, würde ich hier auch eher zu innerHtml greifen, als zu document.write, obwohl ich nicht generell gegen selbiges bin.
 
Da der Code von Otternaut, den er ausgeben will, keinen ausführbaren Code enthält, aber html-tags, würde ich hier auch eher zu innerHtml greifen, als zu document.write
das ist deine subjektive entscheidung. objektiv betrachtet, hat innerHtml hier keinen vorteil gegenüber document.write
html-tags schreibt document.write genauso gut wie innerHtml
 
Ich ahnte schon, als ich den Titel gelesen hatte, was jetzt kommt... :D
 
gerade als anfänger kann man document.write ruhig nutzen
... und dann hier den nächsten Thread aufmachen, wenn es in einer Funktion, die nicht während des Ladens ausgeführt wird, seltsame Dinge macht...
der code ist kein stück besser als der vom op
Wollte ja auch nur die Verwendung von .innerHTML demonstrieren.
auch wenn du die unübersichtlich setzt
Warum unübersichtlich? Das ist (m)ein ganz normaler Stil...
hat innerHtml hier keinen vorteil gegenüber document.write
Das ist falsch! Nach dem Laden der Seite ist document.write() komplett nutzlos, wenn ich kein impliziter document.open() haben will... aber ich werde nicht (nochmal) darüber diskutieren.
Ich ahnte schon, als ich den Titel gelesen hatte, was jetzt kommt...
Ich leider auch - aber ich konnte und kann mich ja nicht zurückhalten...
 
Ich leider auch - aber ich konnte und kann mich ja nicht zurückhalten...
Vielleicht macht es Sinn, dauerhaft nicht damit zu argumentieren, dass das nicht für Anfänger geeignet ist sondern mit der jeweiligen Anwendung bzw. deren Versuch, also hier mit dem laden der Seite. Denn die Empfehlung der Nichtnutzung daraus herzuleiten, dass das nicht für Anfänger geeignet ist scheint mir etwas sperrig zu sein, sodass man die Begründung nicht mal so eben kurz in zwei Sätzen schreiben kann. Und das führt dann natürlich immer zu Rückfragen und Gegenargumente. Mal ganz unabhängig davon, dass hesst deine Argumente ja eigentlich inzwischen kennen sollte.
Oder man verlinkt zum Thead wo es ausführlich durchleuchtet wurde.
 
Also ich schlage mich in diesem Punkt auch auf Korbinians Seite: ich bin der Meinung, man sollte Anfänger von vornherein darauf hinweisen, document.write generell zu vermeiden. Eine schlichte Maßnahme, die viele Fehler im Voraus verhindert. Und Nachteile dadurch, auf document.write zu verzichten, ergeben sich selten...

Oder man verlinkt zum Thead wo es ausführlich durchleuchtet wurde.
Wäre eine gute Idee!
...bloß glaube ich, dass das nicht nur ein Thread ist. Da müsste man ziemlich viele suchen ;)
 
Vielleicht macht es Sinn, dauerhaft nicht damit zu argumentieren, dass das nicht für Anfänger geeignet ist sondern mit der jeweiligen Anwendung bzw. deren Versuch, also hier mit dem laden der Seite. Denn die Empfehlung der Nichtnutzung daraus herzuleiten, dass das nicht für Anfänger geeignet ist scheint mir etwas sperrig zu sein, sodass man die Begründung nicht mal so eben kurz in zwei Sätzen schreiben kann.
Wieso sollte das einen Sinn machen? Mal ehrlich: Wie oft nutzt du document.write() denn?
Warum denn nicht gleich einen Anfänger auf einen, im Alltag gebräuchlichen Weg, leiten? Natürlich will ich jetzt damit nicht sagen, das document.write() keinerlei Daseinsberechtigung hat! Aber das wäre genauso wenn ich folgenden Fall hätte:
Ein Anfänger zeigt Problemcode, den aus seinem Buch oder von seinem Lehrer/Professor etc. hat und als erstes entdecken wir ein language=javascript".
Sollen wir dann auch lieber sagen: Alles supi und mach weiter so und lerne aktuelles und im Alltag gebräuchliches JavaScript?
 
Sollen wir dann auch lieber sagen: Alles supi und mach weiter so und lerne aktuelles und im Alltag gebräuchliches JavaScript?

Wenn hier aber von "im Alltag gebräuchlichem" JavaScript die Rede ist, muss ehrlicherweise auch erwähnt werden, das man im Quelltext vieler Webseiten von Firmen, öffentlichen Einrichtungen, wo man eigentlich meinen sollte, das dort Leute mit der Betreuung der Web Repräsentanz beauftragt sind, die ihr Handwerk verstehen; aber auch in Angeboten wie SelfHTML, noch recht oft Code wie

a href="javascript: oder script type="javascript/text" oder onClick findet.

Sicherlich bedeutet dies nicht, das diese Praxis in einem Spezial-Forum, wie diesem, noch befeuert werden soll, aber "im Alltag gebräuchliches" JavaScript heißt nicht automatisch, korrektes und neuestes JavaScript.
 
Zuletzt bearbeitet von einem Moderator:
oder script type="javascript/text"
Meintest du jetzt wirklich "javascript/text" oder die korrekte Angabe type="text/javascript"? Das type-Attribut muss nämlich streng genommen in HTML 4 angegeben werden, erst ab HTML5 fällt es weg...

PS: ich weiß, das fehlende Syntax-Highlighting bei JS-Code ist nervig (wir werden das eventuell in nächster Zeit auch ändern, dass es auch -Tags gibt), aber
PHP:
 sollte bitte weiterhin nur für PHP-Code benutzt werden.
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben