Javascript

Style ändern#

    function findStyle(selectorText) {
      for (var i = 0; i < document.styleSheets.length; ++i) {
        var styleSheet = document.styleSheets[i];
        var css = styleSheet.cssRules || styleSheet.rules;
        for (var j = 0; j < css.length; ++j) {
          var rule = css[j];
          if (rule.selectorText == selectorText)
            return rule.style;
        }
      }
    }

Die Funktion kann dann wie folgt verwendet werden:

findStyle('.test').width = '100px';

Events#

Events aus Mozilla und IE bekommt man mit "event || window.event":
<input onkeypress="alert((event || window.event).keyCode);">

Focus und Keypress#

Normale Elemente bekommen Key-Events nur mit, wenn sie einen Tabindex und den Focus haben:
<div tabindex="0" onkeypress="alert((event || window.event).keyCode);" onmouseover="focus();" onmouseout="blur();">
  TEST
</div>

Dynamische Header#

Folgender Code fügt neue Header ein:
function addHeader(text) {
	var head = document.getElementsByTagName("head")[0];
	var div = document.createElement('div');
	div.innerHTML = text;
	for (var i = 0; i < div.childNodes.length; ++i) {
		var element = document.createElement(div.childNodes[i].nodeName);
		element.innerHTML = div.childNodes[i].innerHTML;
		for (var j = 0; j < div.childNodes[i].attributes.length; ++j) {
			element.setAttribute(
				div.childNodes[i].attributes[j].name, div.childNodes[i].attributes[j].value);
		}
		head.appendChild(element);
	}
}

Property Interceptor#

Mit Object.defineProperty kann man einen Interceptor für Getter und Setter einfügen:
	var scrollTop = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(HTMLElement.prototype), "scrollTop");
	Object.defineProperty(HTMLElement.prototype, "scrollTop", {
		get: function() {
			return scrollTop.get.apply(this, arguments);
		},
		set: function() {
			return scrollTop.set.apply(this, arguments);
		}
	});

Lambda Function#

Mit dieser Funktion können anonyme, rekursive Funktionen definiert werden:
var Y = function(f) {
	return (function(g) {
		return g(g);
	})(function(h) {
		return function() {
			return f.apply(h(h), arguments);
		};
	});
};

Eine rekursive Funktion sieht dann wie folgt aus (Fakultät, aufgerufen mit Wert 5):

Y(function(n) {return n == 0 ? 1 : n * this(n - 1);})(5);