BasisSeminare
Zum Seitenanfang Schritt hoch Schritt runter Zum Seitenende
Seite: JavaScript-Referenz


Diese JavaScript-Referenz dient als Nachschlagewerk für grundlegende und häufig verwendete JavaScript-Schnipsel. Die Schreibweisen erfolgen sowohl als native Anweisungen mit dem vorhandenen Sprachstandard als auch in jQuery-Syntax.

jQuery ist eine JavaScript-Bibliothek (gelegentlich auch als Framework bezeichnet, s. Glosssar), welches den in Browsern zur Verfügung stehenden Sprachstandard um viele nützliche Funktionen erweitert. Ebenso gleicht es Unterschiede in verschiedenen Browsern und Versionen aus, sodass Kompatibilitäts-Probleme weitestgehend automatisch umgangen werden. Deutsche Einsteiger-Tutorials für JQuery gibt es mit jQuery für Anfänger sowie eine allgemeine Einführung und Grundlagen.

Für den kompletten Durchblick in JavaScript und jQuery sind die Tutorials von Peter Kropff und HTML-seminar eine klare Empfehlung. Ebenso lassen sich dort Grundlagen zu HTML(5) und CSS(3) aneignen.

Inhalt


JavaScript-Referenz

DOM-Knoten ansteuern


Elemente auswählen


Zugriff über ID:

1
2
3
4
5
 
var element = document.getElementById('element-id');
if (element) {
// Element wurde gefunden und kann verwedet werden.
element.style.width = '100%';
}
 


Es ist wichtig zu prüfen, ob auch tatsächlich ein Element mit der angegebenen ID gefunden werden konnte. Ansonsten führen Fehler beim Zugriff auf Eigenschaften und Methoden auf einem nicht vorhandenen Objekt zu einem Abbruch des ganzen Skripts.


1
 
$('#element-id').css('width', '100%');
 


Eine ID wird wie in CSS mit einer Raute (#) gekennzeichnet.


Zugriff über Name:

1
2
3
4
 
var elements = document.getElementsByName('element-name');
for (var i = 0; i < elements.length; i++) {
elements[i].style.width = '100%';
}
 


Die Rückgabe ist eine Liste mit den gefundenen HTML-Elementen, da mehrere Elemente das gleiche name-Attribut besitzen können. Der Zugriff auf die Elemente erfolgt wie bei einem Array und bietet so die Verwendung in Schleifen an.

1
2
3
4
5
 
var elements = document.getElementsByName('element-name');
if (elements.length > 0) {
// Min. ein Element (evtl. einziges) gefunden und verwenden.
elements[0].style.width = '100%';
}
 


Auch hier muss vor dem Zugriff sichergestellt sein, dass auch wirlich ein Element gefunden werden konnte. In Schleifen entfällt diese Prüfung in der Regel, weil sie nicht durchlaufen werden, wenn die Länge des Arrays gleich "0" ist.


1
 
$('[name="element-name"]').css('width', '100%');
 


Die Syntax orientiert sich an CSS, bei der ein Attribut in eckigen Klammern angegeben wird. Optional kann dabei die Auswahl mit Gleichheitszeichen und nachfolgendem Wert auf Elemente mit bestimmtem Attribut-Wert eingegrenzt werden, hier also element-name.

Auch ohne Schleife wird die Methode .css() auf allen gefundenen Elementen angewendet.


Zugriff über Tag-Name:

1
2
3
4
 
var elements = document.getElementsByTagName('div');
for (var i = 0; i < elements.length; i++) {
elements[i].style.width = '100%';
}
 


Die Rückgabe ist eine Liste mit den gefundenen HTML-Elementen, deren Tag dem angegebenen Namen entspricht. In diesem Fall wären das alle DIV-Tags. Der Zugriff auf die Elemente erfolgt wie bei einem Array und bietet so die Verwendung in Schleifen an. Auch hier muss immer das Vorhandensein vor Verwendung sichergestellt werden, siehe dazu auch Zugriff über Name.


1
 
$('div').css('width', '100%');
 


Die Syntax orientiert sich an CSS, bei der ein Selektor nur aus dem Namen eines Tags besteht.

Auch ohne Schleife wird die Methode .css() auf allen gefundenen Elementen angewendet.


Zugriff über CSS-Klasse (ab HTML5):

1
2
3
4
 
var elements = document.getElementsByClassName('full-width');
for (var i = 0; i < elements.length; i++) {
elements[i].style.width = '100%';
}
 


Die Rückgabe ist eine Liste mit den gefundenen HTML-Elementen, deren Klassen-Name dem angegebenen Namen entspricht. In diesem Fall wären das alle Tags mit der Klasse full-width. Der Zugriff auf die Elemente erfolgt wie bei einem Array und bietet so die Verwendung in Schleifen an. Auch hier muss immer das Vorhandensein vor Verwendung sichergestellt werden, siehe dazu auch Zugriff über Name.

Mehrere Klassen-Namen können durch Leerzeichen getrennt angegeben werden.


1
 
$('.full-width').css('width', '100%');
 


Eine Klasse wird wie in CSS mit einem Punkt (.) gekennzeichnet.

Auch ohne Schleife wird die Methode .css() auf allen gefundenen Elementen angewendet.


Zugriff über Query-Selektor (ab HTML5):

1
2
3
4
 
var element = document.querySelector('#element-id div[name="element-name"] .full-width');
if (element) {
element.style.width = '100%';
}
 


Seit HTML5 können auch mit den grundlegenden JavaScript-Funktionen Elemente wie in CSS oder jQuery über mächtigere Selektoren ausgewählt werden. Mehrere passende Selektoren können durch Kommata getrennt angegeben werden. Die Rückgabe von querySelector liefert immer nur das erste gefundene Element, auch wenn mehrere auf die Auswahl zutreffen würden. Auch hier muss immer das Vorhandensein vor Verwendung sichergestellt werden, siehe dazu auch Zugriff über ID.

Falls der Zugriff nur über die Angabe einer ID, eines Namens oder einer Klasse erfolgt, sind die anderen document.getElementBy…()-Funktionen vorzuziehen, da diese aufgrund der offiziellen Spezifikation schneller arbeiten. Dennoch ist der Query-Selektor in HTML5 schneller als der von jQuery.

1
2
3
4
 
var elements = document.querySelectorAll('#element-id div[name="element-name"] .full-width');
for (var i = 0; i < elements.length; i++) {
elements[i].style.width = '100%';
}
 


Der querySelectorAll sucht nach allen Vorkommen von Tags, auf welche der Selektor zutrifft. Der Zugriff auf die Elemente erfolgt wie bei einem Array und bietet so die Verwendung in Schleifen an. Auch hier muss immer das Vorhandensein vor Verwendung sichergestellt werden, siehe dazu auch Zugriff über Name.


1
 
$('#element-id div[name="element-name"] .full-width').css('width', '100%');
 


In jQuery ist es ohnehin bereits üblich, die Elemente über eine css-ähnliche Syntax auszuwählen. Deswegen nur ähnlich, weil jQuery selbst noch eigene zusätzliche Pseudo-Selektoren definiert.

Es wird übrigens nicht unterschieden, ob nur das erste oder alle Vorkommen gesucht werden sollen, da es generell immer alle auf den Selektor passenden Elemente heraussucht. Auch ohne Schleife wird die Methode .css() auf allen gefundenen Elementen angewendet.



Besonderheiten in jQuery


DOM-Manipulation


Bei der Auswahl von HTML-Elementen muss in der Regel sichergestellt werden, ob auch ein entsprechendes Element (je nach Methode auch mehrere) gefunden werden konnte. Ohne diese Prüfung wären sonst Fehler die Folge, bei dem Versuch, ein nicht vorhandenes Objekt zu verwenden. Bei jQuery ist eine solche Prüfung nicht unbedingt nötig. Ist das HTML-Element nicht auf der Seite vorhanden, passiert einfach nichts. Falls dies in einigen Fällen beabsichtigt ist, sollten solche Stellen mit Kommentaren gekennzeichnet werden, um Verwirrungen zu vermeiden.

Die Anzahl der gefundenen Elemente kann bei Bedarf über die Eigenschaft length abgefragt werden.

1
2
3
 
if ($('.search-class').length > 0) {
// Min. ein Element von der Auswahl betroffen.
}
 


HTML-Elemente erzeugen


HTML-Elemente lassen sich in jQuery leicht über die Angabe eines kurzen Quellcodes erzeugen.

Mittels prepend() und append() können sie am Anfang bzw. Ende in ein bestehendes HTML-Tag auf der Seite eingehängt werden.

1
2
 
var newElement = $('<div></div>');
$('body').append(newElement);
 


Die Methoden before() und after() hängen das Element nicht innerhalb, sondern vor bzw. nach einem anderen ein.

1
2
 
var newElement = $('<div></div>');
otherDiv.before(newElement);
 


Über remove() lassen sich Elemente bei Bedarf auch wieder entfernen.

1
2
3
4
5
6
7
8
9
 
var newElement1 = $('<div id="my-div" class="full-size"></div>');
 
var newElement2 = $('<div></div>')
.attr('id', 'my-div')
.addClass('full-size')
.click(function(e){
// Element wurde geklickt.
})
;
 


Die Tags müssen dabei anfangs nicht leer sein, ihre Attribute können direkt mit im Quelltext angegeben werden. Alternativ kann das generierte Tag über spezifische Methoden nach und nach mit Attributen und passenden Events aufgebaut werden.

Konvertierung von jQuery-Objekten


JavaScript-Objekte können nachträglich in jQuery verpackt werden, um von den Methoden und der Kompatibilität der Bibliothek zu profitieren. Dabei wird das bereits vorhandene Objekt von $(…) eingerahmt.

1
2
3
 
var object = document.getElementById('id');
var jQueryObject = $(object);
[…]
 


Falls möglich, sollte das Objekt allerdings direkt über jQuery herausgesucht werden.

1
 
var jQueryObject = $('#id');
 


Das ist nicht unbedingt schneller, allerdings einfacher lesbar und bewahrt die Kompatibilität zwischen verschiedenen Browsern.


In Ausnahmefällen kann es nützlich sein, ein jQuery-Objekt wieder auszupacken. Ein Beispiel dafür wäre der Aufruf der Methode play() für ein Audio-Element, welche nur auf dem reinen JavaScript-Objekt zur Verfügung steht. Das Auspacken aus jQuery erfolgt wie der Zugriff auf ein Array.

1
2
3
4
5
6
 
var jQueryAudioObject = $('audio');
if (jQueryAudioObject.length > 0) {
var audioObject = jQueryAudioObject[0];
audioObject.play();
}
[…]
 


Es sollte auch hier wieder sichergestellt werden, ob mindestens ein Objekt ausgewählt wurde. Dann kann über den Index "0" auf das erste Element zugegriffen werden. Beim Auslesen weiterer Indizes sind diese ggf. auch abzusichern.


Fehlerbehandlung


Kritische Bereiche, welche also unter manchen Umständen zu Fehlern mit Skript-Abbrüchen führen könnten, werden in try-catch-Blöcke eingefasst.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
try {
// Anweisungen, welche potentiell einen Fehler erzeugen.
/*
* Hier zur Demonstration der Zugriff auf ein nicht
* vorhandenes Element mit der ID "element-id" ohne Absicherung
* auf Vorhandensein (s. DOM-Manipulation, Zugriff über ID).
*/
document.getElementById('element-id').style.width = '100%';
[…]
}
catch (err) {
/*
* Auf den Fehler reagieren,
* eine Meldung ausgeben/protokollieren
* oder einfach nichts tun (leer lassen).
*/
console.error(err);
}
finally {
// Wird immer ausgeführt.
}
 


Hinweis:
Der try-Block wird sofort nach dem ersten Fehler verlassen. Falls mehrere Anweisungen einen Fehler erzeugen könnten, ist entweder die Verwendung mehrerer kompletter try-catch-Blöcke nötig oder das Abfangen der unterschiedlichen Fehler-Klassen mit mehreren catch-Blöcken (nach einem try), für jede abzufangende Fehlerart einer.


try-catch-Blöcke können auch ineinander verschachtelt werden. Der Parameter err (beliebig wählbar) enthält den geworfenen Fehler. Mittels der Anweisung throw kann bei Bedarf ein eigener Fehler geworfen werden, z.B. throw 'falsch'; Unabhängig davon, ob ein Fehler auftrat, wird danach der Inhalt im finally-Block immer ausgeführt. Bei Nichtnutzung kann finally auch einfach entfallen. Mehr dazu unter Fehlerbehandlung mit dem try..catch-Statement.


Stolperfallen


Mehrfach-Selektion in jQuery


jQuery-Methoden wirken sich auch ohne Schleifen auf alle Elemente aus, falls der verwendete Selektor auf mehr als ein Element zutrifft.

1
 
$('.full-width').css('width', '100%');
 


Hier wird die Breite von allen Elementen mit der Klasse full-width verändert.


Tipps und Tricks


Schleifen beschleunigen


Wiederholtes Auslesen von gleichen Werten ist nicht nötig und kostet nur Zeit. Bei folgender (häufig eingesetzten) Verwendung einer For-Schleife wird bspw. in jedem Durchgang die Array-Länge wiederholt ausgelesen. Dies kann auch zu Endlossschleifen führen.

1
2
3
4
5
 
for (var i = 0; i < array.length; i++) {
// Problem, da array.length in jedem Durchlauf wächst:
array.push('Neuer Wert');
[…]
}
 


Bei großen Arrays läuft das Skript dadurch spürbar langsamer. Schneller funktioniert es mit einer Zwischenspeicherung der Array-Länge. Gleichzeitig werden Endlossschleifen vermieden, falls das Array in jedem Schleifendurchlauf vergrößert wird. Die Länge wird hier nicht in jedem Durchlauf erneut mit höherem Wert als vorher ausgelesen, sodass die Schleife auch wirklich zu Ende laufen kann.

1
2
3
4
5
6
7
8
 
for (var i = 0, length = array.length; i < length; i++) {
/*
* Kein Problem, da die Anzahl an Durchläufen
* bereits zu Beginn festgesetzt wird.
*/
array.push('Neuer Wert');
[…]
}
 


Glossar


Array:
Eine Auflistung beliebig vieler, gleichartiger Elemente.

Bibliothek:
Sammlung von Methoden, welche gängige Aufgaben abnehmen sollen. Weiterführende Informationen unter Framework.

DOM:
Das Document Object Model. Die baumartige Struktur von HTML-Elementen wird in JavaScript als eine verschachtelte Objekt-Struktur mit HTML-Elementen abgebildet.

Events:
Ereignisse, welche durch den Programmablauf oder Benutzereingaben ausgelöst werden. Mit sogenannten Event-Handlern kann auf solche Ereignisse reagiert werden.

Event-Handler:
Eine Funktion, welche durch ein Ereignis ausgelöst wird und entsprechend darauf reagieren kann.

Framework:
Ein Grundgerüst für die Entwicklung von Software, welches die Rahmenbedingungen vorgibt. Manchmal verschwimmt die Grenze zwischen Bibliothek und Framework. jQuery ist bspw. in erster Linie eine Bibliothek mit diversen Funktionen, gibt in einigen Fällen jedoch auch eine gewisse Struktur vor.

Konkatenation:
Bei der Programmierung versteht man darunter die Verknüpfung von Zeichenketten (lat. catena = Kette), durch welche ein neuer String zusammengebaut wird. Häufig durch den Plus-Operator umgesetzt. (z.B.: var testGesamt = text1 + text2;)

Snippet:
Code-Schnipsel bzw. Ausschnitt.

Statement:
Eine Anweisung in einer Programmiersprache. Wird üblicherweise mit ";" abgeschlossen.






Xobor Xobor Wiki
Datenschutz