8. Wörter drehen, dass Sie vom Ende bis zum Anfang gelesen werden
Erstmal der Quellcode, dann die Erklärung:
<html>
<head>
<meta name="generator"
content="HTML Studio">
<title>Drehung von woertern oder Saetzen
</title>
<script language="JavaScript">
function enc5() {
var daus="";
var
test=document.changeForm.dialog.value;
var testlang=test.length - 1;
for (var
ska=0;ska<test.length;ska++) {
var minus= testlang-ska;
var raus = eval("test.charAt(" +minus+ ")");
if (1 == 1)
daus+=raus;
}
document.changeForm.dialog.value
= daus
}
</script>
</head>
<body>
<FORM NAME="changeForm">
<center><div><textarea id=dialog rows="10"
cols="35"></textarea></div>
<INPUT TYPE="BUTTON" onClick="enc5()" VALUE="Wort
drehen"></center>
<br>
</FORM></center>
</body>
</html>
---
Hinweis: Sie können Wörter oder ganze Sätze von rechts nach links
schreiben bzw. umdrehen, da Javascript Leerzeichen als einzelne Zeichen
interpretiert, also können Sie gerne eine Din A 4 Seite hineinkopieren
und umdrehen. Auf dieser Seite ist dann der Code ausführlich erklärt.
Das ist wirklich einzigartig, da andere Webseiten nicht solch eine
Lösung mit reinem Javascript anbieten... Das ganze können Sie durch
einen weiteren Knopfdruck dann wieder in die richtige Richtung umdrehen
- geht übrigens auch mit inner-html...
Hyperlink: demo
Das Javascript dürfte die Schwierigkeit sein, daher der Body der
HTML-Seite schnell überflogen: Es gibt eine Textarea mit Namen dialog
und einen Button zum Aufrufen der Funktion enc5.
Sobald eine Texteingabe gemacht wurde - z. B. ein "ab" und der Button
Wort drehen betätigt wurde, wird der Text als Variable test eingelesen (var
test=document.changeForm.dialog.value;).
Zuvor wird eine leere Variable erzeugt: var daus="";
Mit dem fest vorangeschriebenen Befehl length wird die Textlänge
ermittelt, also bei "ab" z. B. eine 2 die Minus 1 genommen wird, also eine 1 ist. Die Zahl wird
in der Variablen testlang gespeichert.
Wieso denn jetzt eine 1, wenn wir zwei Zahlen brauchen. Tja, das ist
wieder höhere Javascript-Mathematik: Javascript zählt bei den meisten
Funktionen von 0 an und dann wird 0 und 1 für zwei Buchstaben oder
Zeichen gebraucht, aber keine 2...
for (var
ska=0;ska<test.length;ska++) { Das ist eine klassische
Vorschleife, die meistens bei Erklärungen mit i statt ska
demonstriert wird. Brauchen Sie mehrere for-Schleifen in einem Projekt,
dann gewöhnen Sie sich dran zwei oder dreistellige
Buchstabenkombinationen zu vergeben...
Merke : Hier wird test.length
verwendet, also ohne den zuvor getätigten Abzug von 1. Da steht bei
zwei Buchstaben eine 2. Wer soll jetzt noch schlau draus werden?
Starten tut das mit 0 im ersten Durchlauf der Schleife und der zweite
Durchlauf ist eine 1.
1 ist die letzte Zahl, die kleiner als zwei ist
(geschrieben <test.length).
Einen dritten Durchlauf gibt es nicht, weil dann 2 = test.length bei
zwei Buchstaben wär. So viel zur Javascriptlogik, die wirklich
scheinbar viele Nutzer an ihr geistiges Ende bringt...
var minus= testlang-ska; Wir wollen gleich
jeden einzelnen Buchstaben abgreifen und verkehrt herum in eine neue
Variable daus
schreiben...
Wir nehmen wieder das Beispiel mi zwei Zeichen a und b. Da würde jetzt
also stehen, das var minus gleich 1-0
ist und im zweiten Durchlauf der Schleife 1-1
Das ist jetzt echt heavy und wird nochmal langsam erklärt.
Im ersten Durchlauf ist ska gleich Null. testlang
wurde von uns bereits definiert als test.length
- 1; ab hat im Beispiel zwei Zeichen, also, also 1 minus
0 =1
Im zweiten Durchlauf ist ska gleich 1 und testlang
1, also die Variable minus
=0
In der nächsten Zeile (var raus
= eval("test.charAt(" +minus+
")");) wird im Probebeispiel zuerst die Variable minus auf 1
gesetzt, während ska 0 ist und testlang 1.
Zweite Durchlauf:
Der Buchstabe b entspricht einer 1 für den charAt-Befehl, der wieder
nach der bescheuerten Javascriptlogik den ersten Buchstaben von dem
String test als 0, in
unserem Beispiel also a=0 und b=1 interpretiert.
Im ersten Durchlauf wird also das b gezogen, dass nach dem ersten Dreh
der erste Buchstabe wird.
Im zweiten Durchlauf wird das a gezogen, dass test.char...0 entspricht.
if (1 == 1)
daus+=raus;
Hm, die erste Hälfte ist Quatschcode, weil 1 immer 1 ist-:), aber nach
Setzung dieser Bedingung könen wir im Fachjargon ein Statement abgeben,
was heißt, füge den Buchstaben, der anhand seiner Nummer ausgewählt
wird, doch einfach mal an die als vorher definierte leere Variable daus
oder eben daus+=raus;
So im Zweiten Durchgang ist die Variable minus=0, also im Beispiel a
und das a wird hinter das b gesetzt.
Das ganze können Sie nun mit weiteren Buchstaben und Leerzeichen machen,
weil es immer wieder dasselbe Spiel ist...
Am Ende der Schleife wird ein Buchstabe nach dem anderen jeden
Schleifendurchgang angehängt und das fertige Wort nach Durchlauf der
Schleife }, dann wird zum Schluss die Variable mit dem Wort ab im Beispiel übergeben (document.changeForm.dialog.value
= daus)
Die Problematiken zusammengefasst:
1. charAt und length arbeiten nach zwei
verschiedenen Logiken - Für charAt ist 0, was für length
definitiv (logisch richtig eine 1 ist)
2. for Schleifen unterliegen der positiv-Javascript-Logik, nämlich das
der erste der nullte Durchlauf ist, was für uns freilich der erste
Durchlauf ist.
3. Um das wieder ins Lot zu bringen, müssen Sie die Schleifenlogik
durchbrechen - indem Sie einfach eine neu Variable Schaffen die
rückwärts zählt: var minus= testlang-ska;
4. Um den Unterschied von der menschlichen zur Javascriptlogik zu
überwinden müssen Sie eine neue Variable schaffen, die um eine Stelle
kürzer als die logische length-weise ist: var testlang=test.length - 1;
5. Dabei dürfen Sie nicht die Schleifenlogik angreifen, die auf
Javascriptlogik getrimmt ist: for
(var
ska=0;ska<test.length;ska++) {
6. Dann müssen Sie es schaffen, die Variable minus in den Charat-Befehl
einzuflechten (var raus =
eval("test.charAt(" +minus+
")");), eine Frage der Syntax
Wie drehe ich das Wort wieder? Einfach Button nochmal betätigen...
Fazit
Es gibt sicher auch andere Lösungen, die man komischer Weise bei den
einschlägigen Suchmaschinen nicht angeboten bekommt und das im Jahr
2014.
Der Autor ist überzeugter Batchschreiber, weil dort eine 1 eine 1 und
keine 0 ist.
Da im Jahr 2014 keine richtig validen Lösungen angezeigt werden kommt
der Autor zum Schluss: Javascript ist nicht immer logisch - bei length
ist eine 1 eine 1 und bei charAt und bei Schleifen dann wieder eine
Null - ist das logisch?
Dem Autor, der Autodidakt ist und somit die Konventionen
eines Profis nicht entgegenstehen, kann unvorbelastet eine Lösung
anbieten, weil er Code nach seiner menschlichen Logik sortiert -
das ist manchmal ein riesiger Vorteil - ich richte mich nach Logik und
nicht nach Konventionen, die einem unvoreingenommenen Denken
entgegenstehen.
Impressum