template

Index :: Javascript :: Hilfsfunktionen

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)

AgentLang() : Sprache des Clients ermitteln

Liefert die Sprachkennung des Clients als String, z.B. 'de', 'en' oder 'it'.
function AgentLang() {
  return ((navigator&&(navigator.language||navigator.userLanguage))||'').substr(0,2);
}

CooGet() : Cookie-Wert (anhand Schlüssel) lesen

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;
}

ElemsByCls() : HTML-Elemente mittels CSS-Klasse holen

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;
}

FilterDN() : DN-Element (Zertifikat) formatieren

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
}

GetById() : HTML-Element(e) mittels ID holen

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;
}

GetHexDump() : Hex/Asc-Dump erzeugen

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;
}

HexToStr() : HexString in String wandeln

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; }

RelTimStr() : Relative Zeitangabe

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;
}

StrToHex() : String in HexString wandeln

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; }

ToggByDsp() : HTML-Element (mittels Display) ein/ausblenden

Benötigt als Parameter die display-Eigenschaft des Objekts.
function ToggByDsp(dsp) { dsp = dsp.length? '': 'none'; }

ToggById() : HTML-Element (mittels ID) ein/ausblenden

Benötigt als Parameter die ID des Objekts.
function ToggById(id) {
  var d = document.getElementById(id).style.display;
  d = d.length? '': 'none';
}

ToggBySty() : HTML-Element (mittels Style) ein/ausblenden

Benötigt als Parameter die style-Eigenschaft des Objekts.
function ToggBySty(sty) { sty.display = sty.display.length? '': 'none'; }

URL_Params() : URL-Parameter ermitteln

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;
}

Index :: Javascript


template