Da meine JavaScript/jQuery Skills noch relativ bescheiden sind, habe ich angefangen mir eine kleine Liste mit Tipps und Tricks anzulegen. Da andere eventuell auch Probleme mit JavaScript haben könnten, dachte ich mir das ich meine Liste auch veröffentlichen kann.

Prüfen ob jQuery geladen wurde

if (typeof jQuery == 'undefined') {
    console.log('jQuery nicht gefunden');
} else {
    console.log('jQuery läuft!');
}

Prüfen ob Element vorhanden ist

Es empfiehlt sich, erst zu prüfen ob das gewünschte Element auch vorhanden ist. Sonst kann es Fehler geben wenn das Element nicht vorhanden ist.

if ($("#element").length) {
  //sachen machen mit dem element
}

Prüfen ob Bilder geladen wurden

Wenn man bspw. eine Galerie schön gestalten will, ist es hilfreich zu warten bis alle Bilder geladen wurden.

$('img').on('load', function () {
    console.log('Alle Bilder geladen');
});

BEST PRACTISE

Manchmal geht es auch um den Stil...

Besser .on() statt .click()

Statt dem .click() Binding oder ähnlichem kann man auch .on() nutzen. Das hat gleich mehrere Vorteile. Man kann direkt mehrere Events nutzen, das Binding wird auch direkt auf dynamisch erstellte Elemente und man kann auch "namespaces" nutzen.

.on('click tap hover') // mehrere events

.on('click.menuOpening') // Namespaces
// mit Namespaces kann man auch spezielle Events entfernen
.off('click.menuOpening') // andere Bindings bleiben unberührt

Cache jQuery Selectors

Wenn man häufiger auf ein bestimmtes Element zugreifen muss, sollte man das Element "cachen". Jedes mal wenn man ein Element sucht muss jQuery einmal durch den kompletten DOM wandern um alle Elenebte zu finden. Durch das Cachen der Position lässt sich die Performance etwas verbessern.

// blocks cachen
var blocks = $('#blocks').find('li');

// blocks nutzen
$('#hideBlocks').on('click', function () {
    blocks.fadeOut();
});

$('#showBlocks').on('click', function () {
    blocks.fadeIn();
});

Call Chaining

Wenn man mehrere Methodenaufrufe auf einem Element hat, lassen sich diese Aufrufe auch verketten. Dadurch muss auch nicht jedes mal durch den ganzen DOM gewandert werden.

// SCHLECHT
$('#elem').show();
$('#elem').html('ping');
$('#elem').otherStuff();

// BESSER
$('#elem')
  .show()
  .html('ping')
  .otherStuff();

ELEMENTE ERZEUGEN

Easy Back To Top

Für einen einfachen "Back to top"-Button braucht man keine speziellen Plugins oder sonstiges. jQuery bringt selsbt schon die scrollTop und animate Methoden mit. Damit lässt sich das leicht umsetzen.

// Back to top
$('.container').on('click', '.back-to-top', function (e) {
    e.preventDefault();
    $('html, body').animate({scrollTop: 0}, 700);
});
<!-- Create an anchor tag -->
<div class="container">
  <a href="#" class="back-to-top">Back to top</a>
</div>

Einfaches Akkordeon

// alle Panels schließen
$('#akkordeon').find('.content').hide();

// Akkordeon
$('#akkordeon').find('.akkordeon-header').on('click', function () {
    var next = $(this).next();
    next.slideToggle('fast');
    $('.content').not(next).slideUp('fast');
    return false;
});

FORMULARE

Input/Button deaktivieren

Manchmal will man das der User z.B. erst die AGB akzeptiert oder ähnliches, bevor der User sich anmelden darf oder ähnliches.

$('input[type="submit"]').prop('disabled', true);
// und Input wieder aktivieren
$('input[type="submit"]').prop('disabled', false);

MAGIC

Listeneinträge alphabetisch sortieren

Manchmal hat man wenig Einfluss auf die Erstellung einer Liste will jedoch doch eine sortierung drin haben.

var ul = $('#list'),
lis = $('li', ul).get();

lis.sort(function (a, b) {
    return ($(a).text().toUpperCase() < $(b).text().toUpperCase()) ? -1 : 1;
});

ul.append(lis);