Wenn eine Sprüchesammlung vorliegt, so soll abhängig vom Datum mit Hilfe von ECMAScript ein Spruch ausgewählt und geeignet angezeigt werden.
Zufallszitate mit ECMAScript:
Die Klasse zuf_zit() definiert die Member- Funktionen wie add_zitat (titel,text) und show_zitat(). add_zitat (titel, text) fügt ein weiteres Zitat in den inneren Array ein |
<script type="text/javascript"> // zuf_zit meint (Z)ufalls(Z)itate function zuf_zit() { this.zuf_zit_arr = new Array(); zuf_zit.prototype.add_zitat = function add_zitat(titel, text) { var len = this.zuf_zit_arr.length; this.zuf_zit_arr[len+0] = titel; this.zuf_zit_arr[len+1] = text; } zuf_zit.prototype.show_zitat = function show_zitat() { var sec = (new Date()).getSeconds(); var len = this.zuf_zit_arr.length; len = Math.floor(len/2); var idx = (sec % len)*2; var titel = this.zuf_zit_arr[idx+0]; var text = this.zuf_zit_arr[idx+1]; var s = "<a href=\"javascript:"; s += "location.reload();\">weiter...</a>"; s += "<p class=\"big\">"; s += titel + "<br \/>"; s += text + "</p>"; document.write(s); } zuf_zit = zuf_zit.length = this; } //////////////////////////////////////////// var sammlung = new zuf_zit(); sammlung.add_zitat( "Kinderreim", "Ibbe dippe tap<br>" +"und du bist ab" ); sammlung.add_zitat( "Buddha", "Es ist der Geist,<br>" +"der die Welt erschafft" ); sammlung.add_zitat( "Unbekannt:", "Glück ist stets gegenwärtig <br>" +"und ohne Suchen und Finden" ); sammlung.show_zitat(); </script> | Ausgabe: Die Klasse zuf_zit() definiert die Member-Funktionen add_zitat(titel,text) und show_zitat() add_zitat(titel, text) fügt ein weiteres Zitat in den inneren Array ein |
Beim Lernen des Giutarre-Spieles werden Akkord-Griffe für Dur, Moll, vermindert, usw. gelernt. Diese Griffe sollen mit Hilfe von als js-Beispiel in einem Formular angezeigt werden.
Einführendes Beispiel | ||
ECMAScript -Code | Ausgabe | |
---|---|---|
Giutarre
Akkorde können ausgewählt und angezeigt werden. Die Funktion html_select("size='1' ") erstellt den HTML-Quelltext für eine Akkord-Auswahlbox. Die Funktion html_guitarre("class='grau1i' ") erstellt den HTML-Quelltext für eine Tabelle, die mithilfe von vielen <input type='checkbox' onclick=''> eine Giutarre mit den Bünden anzeigt. |
function html_select(se_style) { var s = "<form name=\'GIUTARRE_SELECT'\>"; s+="\n<select name=\'GIUTARRE_CHORD\' "; s+= se_style + "\n onChange=\'guitarre_akkord"; s+="(options[selectedIndex].value);\'> "; s+="\n<option value=\'(0,0,0,0,0,0)\'>LEER</option>"; s+="\n<option value=\'(0,3,2,0,1,0)\'>c</option>"; s+="\n<option value=\'(1,3,3,2,1,1)\'>f</option>"; s+="\n<option value=\'(1,0,3,2,1,1)\'>f</option>"; s+="\n<option value=\'(3,2,0,0,0,3)\'>g</option>"; s+="\n</select>"; //s+="\n<textarea rows='5' cols='35'" //s+=" name='TXT'></textarea>" s+="\n</form>"; return s; } function wrt_zeilen(n, td_style) { var i, s=""; for(i=0; i<6*n; i++) { if(i%6==0) s+="\n</td></tr>\n <tr>"; else s+="\n</td>"; s+="<td " + td_style + ">" s+="<input type=\'checkbox\' onclick=\'\'>"; } return s; } function wrt_bund(td_style) { var s= "\n</td></tr>" +"\n <tr><td " + td_style + "> E" +"\n</td><td " + td_style + "> a" +"\n</td><td " + td_style + "> d" +"\n</td><td " + td_style + "> g" +"\n</td><td " + td_style + "> h" +"\n</td><td " + td_style + "> e"; s += wrt_zeilen(1, td_style); return s; } function html_guitarre(td_style) { var s = "\n<form name=\'GUITAR'\>"; s += "\n<table border=\'1\' width=\'120\' "; s += " cellpadding=\'0\' cellspacing=\'0\'"; s += "\n<tr><td " + td_style; s += " colspan=\'6\' align=\'center\'>Bund"; s += wrt_bund( td_style); s += wrt_zeilen(8, "class='grau3'"); s += "\n</td></tr></table>"; s += "\n</form>"; return s; } function guitarre_akkord(val) { var i, j, k, arr=null; var len = document.GUITAR.length; for (i=0; i < len; i++) { document.GUITAR[i].checked=false; } eval("arr=new Array"+val+";"); for (j = 0; j < 6 ; j++) { k = j + 6*parseInt(arr[j]); if(k<len)document.GUITAR[k].checked=true; } } /////////////////////////////////////////// var str = html_select ("size='1'"); str += html_guitarre("class='grau1i'"); document.write(str); |
Bitte wählen: |
Hier einige Giutarren-Akkorde
<option value="(1,2,3,4,5,6)"> test</option> <option value="(0,3,2,0,1,0)"> c</option> <option value="(0,3,5,10,14,19)"> yyy </option> <option value="(3,5,10,14,19)"> C </option> <option value="(5,10,14,15,19)"> C6 </option> <option value="(5,10,14,19,21)"> C7 </option> <option value="(3,4,5,14,19)"> Cmaj7 </option> <option value="(5,14,19,21,22)"> C9 </option> <option value="(3,10,19,20)"> Csus4 </option> <option value="(4,19,20,21)"> C7sus4</option> <option value="(8,10,12,15)"> Cdim7 </option> <option value="(19,28,32,33)"> Cm </option> <option value="(19,21,28,32)"> Cm7 </option> <option value="(2,15,17,22)"> D </option> <option value="(1,2,4,15,17)"> D6 </option> <option value="(2,10,15,17)"> D7 </option> <option value="(1,2,15,16,17)"> Dmaj7 </option> <option value="(26,31,33,34,35)"> D9 </option> <option value="(1,2,15,22,23)"> Dsus4 </option> <option value="(1,2,10,15,23)"> D7sus4</option> <option value="(2,4,9,11)"> Ddim7 </option> <option value="(2,11,15,22)"> Dm </option> <option value="(1,2,10,11,15)"> Dm7 </option> <option value="(20,25,27,28,29)"> Eb9 </option> <option value="(0,4,5,9,13,14)"> E </option> <option value="(0,2,4,5,9,13)"> E7 </option> <option value="(0,2,9,13,17,22)"> E9 </option> <option value="(0,2,5,9,13,16)"> E13 </option> <option value="(0,3,4,5,13,14)"> Em </option> <option value="(0,3,5,13,14,16)"> Em6 </option> <option value="(0,3,5,13,14,22)"> Em7 </option> <option value="(10,11,15,20)"> F </option> <option value="(6,19)"> F5 </option> <option value="(1,2,6,10,15)"> F6 </option> <option value="(1,5,6,10,14,15)"> Fmaj7</option> <option value="(6,9,10,11,19,20)"> Fm </option> <option value="(6,8,9,10)"> Fm7 </option> <option value="(12,16,17,21,25,26)"> F# </option> <option value="(5,12,14,16,21)"> F#7 </option> <option value="(7,9,12,14,16)"> F#9 </option> <option value="(12,15,16,17,25,26)"> F#m </option> <option value="(5,15,16,26)"> F#m7</option> <option value="(2,3,4,13,18,23)"> G </option> <option value="(14,18,22,27)"> G6 </option> <option value="(2,3,4,11,13,18)"> G7 </option> <option value="(18,22,26,27)"> Gmaj7 </option> <option value="(4,15,18,20)"> G9 </option> <option value="(14,15,22,23)"> G6/9</option> <option value="(2,3,10,18,23)"> Gsus4 </option> <option value="(3,10,18,20,23)"> G7sus4</option> <option value="(3,7,14,16,18)"> Gdim7 </option> <option value="(2,3,7,18,22)"> Gm </option> <option value="(18,20,21,22)"> Gm7 </option> <option value="(1,5,14,15,16)"> A </option> <option value="(1,3,5,14,16)"> A7 </option> <option value="(3,4,5,14,25,30)"> A9 </option> <option value="(1,3,20,22,23)"> A13 </option> <option value="(1,5,10,14,15)"> Am </option> <option value="(0,1,10,14,15,17)"> Am6 </option> <option value="(30,32,33,34)"> Am7 </option> <option value="(7,20,21,22)"> Bb </option> <option value="(13,26,27,28)"> B </option> <option value="(4,8,13,15,17)"> B7 </option> <option value="(8,13,15,16)"> B9 </option> <option value="(13,22,26,27)"> Bm </option> <option value="(2,4,9,13,17)"> Bm6 </option> <option value="(2,4,13,15,17)"> Bm7</option>
Ein mehrzeiliger String enthält "\n" und soll nun an diesen Stellen zusätzlich Zeilen-Nummern erhalten. Ein solcher String kann z.B. aus einem Textarea-Tag kommen. Er soll mit aufsteigenden Zeilen-Nummeren versehen werden. Ein String aus dem Textarea-Tag enthält Zeilenumbrüche "\n". Wenn z.B. ein solcher String in einem eingebetteten Inline-Frame (iframe-Tag) angezeigt werden soll, so muß ersetzt werden:
"\n" durch "<br />", "&" durch "&", "<" durch "<", ">" durch ">"
Nachfolgend 4 Möglichkeiten zur Erzeugung von Zeilen-Nummern:
a) src.indexOf(find,abPos), src.substring(pos1,pos2)-Methode b) src.split(" ")-Methode c) </li><li>&-Methode d) vielseitig: do_regexpr_arr_paare(src, arr)
(Editor-) Zeilen in html wandeln und mit aufsteigenden Zeilen-Nummeren versehen. a) Verwendet wird zum Suchen eines Strings fStr in src: src.indexOf(fStr) b) Verwendet wird zum Herausgreifen von Teilstrings: src.indexOf(fStr,abPos) Dann werden die Sub-Strings src.substring(pos1,pos2) zum Ausgabe-String zusammen-gesetzt. | ||
String src finde fStr: src.indexOf(fStr) src.indexOf(fStr,abPos) hole Teilstring: src.substring(pos1,pos2) rStr bedeutet Replace- String |
var src = "h-line <hr />\n& hier 2.Z\n\nhier 4.Z\n"; //------ var fStr = "&", fLen = fStr.length; var rStr = "&", rLen = rStr.length, pos = -rLen; while( (pos = src.indexOf(fStr, pos+rLen)) > -1) { src = (src.substring(0,pos) + rStr +src.substring(pos+fLen, src.length)); } //------ fStr = "<"; fLen = fStr.length; rStr = "<"; rLen = rStr.length; pos = -rLen; while( (pos = src.indexOf(fStr, pos+rLen)) > -1) { src = (src.substring(0,pos) + rStr +src.substring(pos+fLen, src.length)); } //------ fStr = ">"; fLen = fStr.length; rStr = ">"; rLen = rStr.length; pos = -rLen; while( (pos = src.indexOf(fStr, pos+rLen)) > -1) { src = (src.substring(0,pos) + rStr +src.substring(pos+fLen, src.length)); } //------ fStr = "\n"; fLen = fStr.length; rStr = "<br />"; rLen = rStr.length; pos = -rLen; var zStr="001", zNum = 1; src = zStr + src; while( (pos=src.indexOf(fStr,pos+rLen+zStr.length))>-1) { zNum ++; // Zeilen-Nummer hochzählen if(zNum< 10) zStr = "00"+zNum; else if(zNum<100) zStr = "0" +zNum; else zStr = zNum; src = (src.substring(0,pos) + rStr + zStr +src.substring(pos+fLen, src.length)); } src = "Gewandelt:<br />" + src; document.write(src); |
(Editor-) Zeilen werden in html gewandelt und mit aufsteigenden Zeilen-Nummeren versehen, indem der gegebene String src mit src.split("xyz") an den Trennstellen "xyz" aufgespalten wird. Die Teilstrings sind dann im Array arr. Der Array wird (mit Hinzufügungen) wieder zun Ausgabe-String zusammen-gesetzt. | ||
Teile src an den Trennstellen "xyz" mit src.split("xyz") und setze den arr zusammen, wobei an den Trennstellen die Zeilen-Nummern eingefügt werden |
var old = "<hr />\\n& hier 2.Z\\n\\nZ 4\\n"; var src = "h-line <hr />\n& hier 2.Z\n\nhier 4.Z\n"; var i, arr; arr = new String(src).split("&"); src=""; for(i=0; i < arr.length-1; i++) { src += arr[i].toString() + "&"; } src += arr[i].toString(); arr = new String(src).split("<"); src=""; for(i=0; i < arr.length-1; i++) { src += arr[i].toString() + "<"; } src += arr[i].toString(); arr = new String(src).split(">"); src=""; for(i=0; i < arr.length-1; i++) { src += arr[i].toString() + ">"; } src += arr[i].toString(); arr = new String(src).split("\n"); src=""; for(i=0; i < arr.length; i++) { src += "<span style='background:#000000;color:#ffffff;'>"; src += "<br />" + (i+1) + ":"; src += "</span> "; src += arr[i].toString(); } document.write(src); |
(Editor-) Zeilen werden in html gewandelt und mit aufsteigenden Zeilen-Nummeren versehen,
indem reguläre Ausdrücke src.replace(RegExpr,replStr) und eine Liste <ol><li>h-line <hr /> </li><li>& hier 2.Z ... </li></ol> verwendet werden. | ||
Suche im String src gemäss dem RegExpr und ersetze mit dem replStr: src.replace (RegExpr,replStr) |
var src = "h-line <hr />\n& hier 2.Z\n\nhier 4.Z\n"; src = new String(src).replace(/&/g,"&"); src = new String(src).replace(/</g,"<"); src = new String(src).replace(/>/g,">"); src = new String(src).replace(/\n/g,"</li><li>"); src = "<ol class='ol'><li>" + src + "</li></ol>"; src = "Gewandelt:<br />" + src; document.write(src); |
(Editor-) Zeilen werden in html gewandelt und mit aufsteigenden Zeilen-Nummeren versehen, wobei eine vielseitig einsetzbare Funktion do_regexpr_arr_paare(src, arr) die Arbeit verrichtet. Ist beiden Array-Paaren arr[i] ein String, d.h. typeof(arr[i])=="string"), so wird die replace(re,arr[i+1])-Methode verwendet. Ist beiden Array-Paaren arr[i] eine Zahl, d.h. typeof(arr[i])=="number", so wird an den Split-Stellen arr[i+1], ab der Anfangszahl arr[i] die nächsten Fundstellen fortlaufend "hochgezählt.
do_regexpr_arr_paare(src, arr) macht die Arbeit... | ||
Suche im String src gemäss dem RegExpr und ersetze mit dem replStr: Auch hochzählen ist mit typeof(arr[i]) =="number" möglich |
function do_regexpr_arr_paare(src, arr) {
if((!arr)||(arr.length<2))
err_if(true,"do_regexpr_arr_paare(str,?arr?)");
var i,j,re,len = 2*Math.floor(arr.length/2);
var glob = arr[arr.length-1]; if(0==arr.length%2) glob = "g";
for(i=0; i < len; i += 2) { //arr-Pärchen ersetzen
if(typeof(arr[i])=="string") {
// normal replace
re = new RegExp(arr[i],glob);
src = new String(src).replace(re,arr[i+1]);
} else if(typeof(arr[i])=="number") {
// count arr[i]++
var aa = new String(src).split(arr[i+1]);
src = "";
for(j=0; j < aa.length-1; j++) {
src += aa[j].toString() + (j+arr[i]);
} src += aa[j].toString();
} else err_if(1,"do_regexpr_arr_paare(???");
} return new String(src);
}
var old = "<hr />\\n& hier 2.Z\\n\\nZ 4\\n";
var src = "h-line <hr />\n& hier 2.Z\n\nhier 4.Z\n";
src = do_regexpr_arr_paare(src,
[ "<","<", ">",">", ""","\"", "&","\&",
"\&","&", "<", "<", ">",">", "\"",""",
"\\n","<br><o0O>:", 1,"<o0O>", "g"]);
src = "Gegeben: <br />" + old + "<br /><br />"
+ "Gewandelt:<br />" + src;
document.write(src);
|
Enthält var s = "...ABCD...";
die ASCII-Zeichen von 1 bis 255,
so können codierte Zeichen mit Hilfe von
escape(s)
bzw.
encodeURI(s)
bzw.
encodeURIComponent(s)
ausgegeben werden:
Nicht codiert werden
0 bis 9
A bis Z
a bis z
-
_
.
!
~
*
'
(
)
,
/
?
:
@
&
=
+
$
Nachfolgend sind jene Zeichen blau markiert, die von escape(s)
abweichen:
Nicht codiert werden
0 bis 9
A bis Z
a bis z
-
_
.
!
~
*
'
(
)
Nachfolgend sind jene Zeichen rot markiert, die von encodeURI
abweichen.
d.h.
encodeURIComponent
codiert zusätzlich zu encodeURI(s)
auch die Zeichen
,
/
?
:
@
&
=
+
$
:
Die PHP-Funktion string rawurlencode ( string $str )
entspricht der RFC 1738 (application/x-www-form-urlencoded)-Vorschrift.
Um z.B. mit ECMAScript einem AJAX-Aufruf eine GET-Adresse
zu übergeben
(z.B.
"my.php"+"?country=" + url_encode(nam1) + "&postcode=" + url_encode(name2)
,
wird die PHP-Funktion url_encode()
gebraucht
Hier ist die zugehörige ECMAScript-Funktion:
function url_decode(s){ s = s.replace(/\+/g," "); return unescape(s); } function url_encode(s){ s = encodeURIComponent(s); return s.replace(/~/g,'%7E').replace(/%20/g,'+'); }