template
Im Gegensatz zu PHP sind in Javascript Filter-, Konvertierungs- und Spezialfunktionen dünn gesät, so dass man oft eigenen Code benötigt:
Siehe auch: Widgets :: DOM-Hilfsfunktionen (dom.js)
Liefert die Sprachkennung des Clients als String, z.B. 'de', 'en' oder 'it'.
function AgentLang() {
return ((navigator&&(navigator.language||navigator.userLanguage))||'').substr(0,2);
}
Benötigt als Parameter den Schlüssel und liefert den Wert zurück.
Siehe Cookies : Zugriff :: Lesen
function CooGet(key) {
var c=document.cookie,s=key+'=',val='',p;
if ((p=c.indexOf(s))>-1) {
p+=s.length; var p2=c.indexOf(';',p); if (p2<0) p2=c.length;
val=unescape(c.substring(p,p2));
} return val;
}
Benötigt als Parameter die Klassenbezeichnung und optional (zur Spezifikation) ein Basiselement und einen Tag-Selektor.
Liefert ein Array mit den gefundenen Objekten zurück.
function ElemsByCls(cls, node, tag) {
//cls: Klasse
//node: Basiselement (optional)
//tag: Tag-Selektor (optional)
//==> liefert Objektarray
var a = new Array();
if (node==null) node = document;
if (tag==null) tag = '*';
var ae = node.getElementsByTagName(tag);
var aen = ae.length;
var patt = new RegExp('(^|\\s)'+ cls +'(\\s|$)');
for (i=0; i<aen; i++) if (patt.test(ae[i].cls)) a.push(ae[i]);
return a;
}
Ein Zertifikatname darf nur bestimmte Zeichen enthalten. Hiermit werden Accents entfernt, Umlaute gewandelt und ungültige Zeichen entfernt. (Verwendung in einem Beispiel / Siehe auch PHP-Version von FilterDN())
Erlaubte Zeichen |
|
& |
' |
( |
) |
, |
- |
. |
/ |
0...9 |
: |
@ |
A...Z |
_ |
a...z |
Hex |
20 |
26 |
27 |
28 |
29 |
2C |
2D |
2E |
2F |
30...39 |
3A |
40 |
41...5A |
5F |
61...7A |
In einer Windows-Umgebung ist der Unterstrich nicht erlaubt!
function FilterDN(t) {
//t: <INPUT>-Textfeld
var i, re, s = t.value;
if (!s.length) return;
var a1 = 'ÀÁÂÃÅàáâãåÈÉÊËèéêëÌÍÎÏìíîïÒÓÔÕòóôõÙÚÛùúûÝŸýÿÑñç_';
var b1 = 'AAAAAaaaaaEEEEeeeeIIIIiiiiOOOOooooUUUuuuYYyyNnc-';
var a2 = 'ÄÖÜäöüßæ', b2 = 'AeOeUeaeoeuessae';
for (i=0; i<a1.length; i++) { //Accents entfernen
re = new RegExp('['+a1.charAt(i)+']','g'); s = s.replace(re, b1.charAt(i)); }
for (i=0; i<a2.length; i++) { //Umlaute wandeln
re = new RegExp('['+a2.charAt(i)+']','g'); s = s.replace(re, b2.substr(i<<1, 2)); }
t.value = s.replace(/[^\s&-),-:@-Za-z]/g, ''); //ungueltige Zeichen entfernen
}
Falls man keinen ANSI-Editor verwendet (sondern z.B. einen UTF-Editor), dann erzeugt das Skript für Sonderzeichen-Laterale evtl. spezielle Codes, die uns einer ANSI-Umgebung (POST/GET-Parameter) nicht viel nützen. Deshalb muss man in solchen Fällen die Sonderzeichen zu Fuß mittels String.fromCharCode() erzeugen:
function FilterDN(t) {
//t: <INPUT>-Textfeld
var i, re, s = t.value;
if (!s.length) return;
var a1 = String.fromCharCode(
0xC0, 0xC1, 0xC2, 0xC3, 0xC5, 0xE0, 0xE1, 0xE2, 0xE3, 0xE5, 0xC8, 0xC9,
0xCA, 0xCB, 0xE8, 0xE9, 0xEA, 0xEB, 0xCC, 0xCD, 0xCE, 0xCF, 0xEC, 0xED,
0xEE, 0xEF, 0xD2, 0xD3, 0xD4, 0xD5, 0xF2, 0xF3, 0xF4, 0xF5, 0xD9, 0xDA,
0xDB, 0xF9, 0xFA, 0xFB, 0xDD, 0x9F, 0xFD, 0xFF, 0xD1, 0xF1, 0xE7, 95);
var b1 = 'AAAAAaaaaaEEEEeeeeIIIIiiiiOOOOooooUUUuuuYYyyNnc-';
var a2 = String.fromCharCode(0xC4, 0xD6, 0xDC, 0xE4, 0xF6, 0xFC, 0xDF, 0xE6);
var b2 = 'AeOeUeaeoeuessae';
for (i=0; i<a1.length; i++) { //Accents entfernen
re = new RegExp('['+a1.charAt(i)+']','g'); s = s.replace(re, b1.charAt(i)); }
for (i=0; i<a2.length; i++) { //Umlaute wandeln
re = new RegExp('['+a2.charAt(i)+']','g'); s = s.replace(re, b2.substr(i<<1, 2)); }
t.value = s.replace(/[^\s&-),-:@-Za-z]/g, ''); //ungueltige Zeichen entfernen
}
Benötigt als Parameter eine (oder mehrere) ID(s) und liefert das gesuchte Objekt (bzw. ein Array mit den gesuchten Objekten) zurück.
function GetById() {
//==> liefert Objekt bzw. Objektarray
var args = arguments.length;
if (args>1) var a = new Array();
for (var i=0; i<args; i++) {
var e = document.getElementById(String(arguments[i]));
if (args==1) return e; a.push(e);
} return a;
}
Zur Kontrolle von Strings und Bytesequenzen. Das Ergebnis kann in einer <TEXTAREA> angezeigt werden (siehe Demo).
function GetHexDump(str, cols) {
// str: darzustellender String
//cols: Anzahl Hex/Asc-Spalten [4...32]
//==> liefert anzeigeformatierten Hex/Asc-Dump, Breite = (cols x 4 + 1) Zeichen
var i, c, cn, sh, sa, s = '', le = str.length;
cols = Math.min(Math.max(cols, 4), 32);
for (i=cn=0; i<le; i++) {
if (!cn) sh = sa = ''; //neue Zeile
if ((c = str.charCodeAt(i)) < 16) sh += '0';
sh += c.toString(16) +' ';
sa += (c > 32? String.fromCharCode(c): ' ');
if (++cn == cols) { //Zeile voll
if (s.length) s += '\n';
s += sh +' '+ sa; cn = 0;
}
}
if (cn) { //letzte Zeile
if (s.length) s += '\n'; i = cols - cn;
while (i--) { sh += ' '; sa += ' '; }
s += sh +' '+ sa;
} return s;
}
Benötigt als Parameter einen String, der HexDigit-Pärchen ['00'...'FF'] enthält und liefert den resultierenden ASC/ANSI-Text. (Siehe auch Umkehrfunktion: String in HexString wandeln)
function HexToStr(h) { var le=h.length&0xFFFFFE,s='',i,c;
for (i=0;i<le;i+=2) s+=String.fromCharCode(parseInt(h.substr(i,2),16)); return s; }
Wandelt eine Zeitdifferenz in ein lesbares Format, z.B. '2 weeks, 4 days ago' oder 'vor 1 Monat, 2 Wochen'.
Es sind Hinweise sowohl auf vergangene als auch zukünftige Zeitpunkte möglich.
Solche Angaben werden oft in Foren verwendet, weil sie aussagekräftiger als die üblichen Datums/Zeit-Angaben sind.
Die Funktion erwartet mindestens einen Parameter: die Zeitdifferenz in Sekunden. Positive Werte weisen auf zukünftige, negative weisen auf vergangene Zeitpunkte hin.
- Der optionale zweite Parameter enthält die Maximalanzahl von Elementen (Standard: 2). Hier könnte man auch 3 oder 4 übergeben um das Ergebnis detaillierter zu gestalten, allerdings sind erfahrungsgemäß nur 2 oder maximal 3 Elemente sinnvoll.
- Durch Setzen des optionalen dritten Parameters auf 1 wird als kleinste Zeiteinheit 'Tag' benutzt - dies ist zu empfehlen, wenn als Vergleichswert ein pures Datum (ohne Uhrzeit) vorlag. Standardmäßig ist dieser Parameter 0, wodurch als kleinste Zeiteinheit 'Minute' angenommen wird.
Englische Version:
function RelTimStr(v,ele,day) { var a=[],f,n,i,t=['year','month','week','day','hour','minute']; if (!ele) ele=2;
if (v<0) { v*=-1; if (day) { if (v<86400) return 'today'; v-=86400; } f=0; } else f=1;
v-=(a[0]=n=Math.floor(v/31534272))*31534272; v-=(a[1]=n=Math.floor(v/2627856))*2627856;
v-=(a[2]=n=Math.floor(v/604800))*604800; v-=(a[3]=n=Math.floor(v/86400))*86400;
v-=(a[4]=n=Math.floor(v/3600))*3600; a[5]=n=Math.floor(v/60);
for (n=0;n<6;++n) if (a[n]) break; if (n>5) return 'in this minute';
for (v='',i=0;n<6&&i<3;++n,++i)
if (a[n]) { v+=(v.length?', ':'')+a[n]+' '+t[n]+(a[n]>1?'s':''); if (--ele<1) break; }
return v+(f?' away':' ago');
}
Deutsche Version:
function RelTimStr(v,ele,day) { var a=[],f,n,i,t=['Jahr','Monat','Woche','Tag','Stunde','Minute']; if (!ele) ele=2;
if (v<0) { v*=-1; if (day) { if (v<86400) return 'heute'; v-=86400; } f=0; } else f=1;
v-=(a[0]=n=Math.floor(v/31534272))*31534272; v-=(a[1]=n=Math.floor(v/2627856))*2627856;
v-=(a[2]=n=Math.floor(v/604800))*604800; v-=(a[3]=n=Math.floor(v/86400))*86400;
v-=(a[4]=n=Math.floor(v/3600))*3600; a[5]=n=Math.floor(v/60);
for (n=0;n<6;++n) if (a[n]) break; if (n>5) return 'in dieser Minute';
for (v='',i=0;n<6&&i<3;++n,++i)
if (a[n]) { v+=(v.length?', ':'')+a[n]+' '+t[n]+(a[n]>1?['en','en','n','en','n','n'][n]:''); if (--ele<1) break; }
return (f?'in ':'vor ')+v;
}
Benötigt als Parameter einen beliebigen Text und liefert einen String mit HexDigit-Pärchen ['00'...'FF']. (Siehe auch Umkehrfunktion: HexString in String wandeln)
function StrToHex(s) { var le=s.length,h='',i,c;
for (i=0;i<le;i++) h+=((c=s.charCodeAt(i))<16?'0':'')+c.toString(16); return h; }
Benötigt als Parameter die display-Eigenschaft des Objekts.
function ToggByDsp(dsp) { dsp = dsp.length? '': 'none'; }
Benötigt als Parameter die ID des Objekts.
function ToggById(id) {
var d = document.getElementById(id).style.display;
d = d.length? '': 'none';
}
Benötigt als Parameter die style-Eigenschaft des Objekts.
function ToggBySty(sty) { sty.display = sty.display.length? '': 'none'; }
Benötigt als Parameter eine URL und liefert die Parameter als Array zurück, dessen Elemente jeweils eine name- und eine value-Eigenschaft besitzen. (Siehe auch Adresse/URL :: Parameter auslesen)
function URL_Params(url) {
//==> liefert Array von Parametern (jeweils mit name- u. value-Eigenschaft)
var ap, a = [];
var i = url.indexOf('?'); if (i<0) return a;
var j = url.indexOf('#'); if (j<0) j = url.length; else if (j < i) return a;
var s = url.substring(i + 1, j); if (s.length < 2) return a;
ap = s.split('&');
for (i=j=0; i<ap.length; i++) {
s = ap[i].split('='); if (s.length != 2) continue;
if (!s[0].length) continue;
a[j++] = { name:unescape(s[0].replace(/\+/g,' ')), value:unescape(s[1].replace(/\+/g,' ')) };
} return a;
}
template |
|