Klasse entfernen ...

lano

Mitglied
Moin.

Ich hab mir ne kleine Funktion gebastelt um eine Klasse zu entfernen.
Allerdings hab ich das Problem das wenn es die Klasse gar nicht gibt es zu nem Fehler kommt und das script nichht weiter macht.

Javascript:
    lib.removeClass = function(idOrElement, strClasses) {
        var element = document.getElementById(idOrElement);
        element.classList.remove(strClasses);
    };
Mach ich da was falsch? Sollte ich vorher prüfen obs Element die Klasse überhaupt hat bevor ich sie zu entfernen versuche ?
 

german

Aktives Mitglied
devCommunity-Experte
Hehe, du hast deine Frage quasi schon selbst beantwortet. Die getElementById Methode gibt null zurück wenn das Element nicht gefunden wird. Sollte also easy sein das zu checken.
 

lano

Mitglied
Die getElementById Methode gibt null zurück wenn das Element nicht gefunden wird.
Die Elemente sind alle da. Nur kommt es mir so vor als gibt es den Fehler wenn ich versuche eine Klasse zu entfernen die es gar nicht gibt.

Also um das wirklich save zu machen müsste ich gucken obs das Element gibt. Danach ob es die Klasse überhaupt hat und erst dann versuchen sie zu entfernen.

so ?
Javascript:
    lib.removeClass = function(idOrElement, strClasses) {
        var element = document.getElementById(idOrElement);
        if (element != null) {
            if( lib.hasClass(idOrElement,strClass) {
                element.classList.remove(strClasses);
            }
        }
    };
 

lano

Mitglied
Verdammt. Du scheinst doch recht zu haben. Ich habs element jetzt vorher auf nul getestet und es gibt zumindest keinen Fehler mehr.
 

asc

Mitglied
devCommunity-Experte
"idOrElement" kann es sein, dass du da neben Ids auch Elemente an getElementById übergibst? Wenn ja: Das funktioniert natürlich nicht.
 

lano

Mitglied
"idOrElement" kann es sein, dass du da neben Ids auch Elemente an getElementById übergibst?
Ne, aber wo du es schon ansprichst. Reicht das idOrElement zu prüfen ob es ein String ist ? Wenn nein als Objekt behandeln ? Wäre jetzt so meine erste Idee. Andere hab ich aber auch nicht :LOL:
 

alinnert

Mitglied
Ja, if (typeof idOrElement === 'string') ist ok. Du kannst auch speziell prüfen, ob es wirklich ein Element ist mit if (idOrElement instanceof Element). Zum Entfernen brauchst du aber nicht prüfen, ob sie existiert. element.classList.remove() macht einfach nichts, wenn es nur die Klasse nicht gibt. Eine Prüfung ginge aber übrigens via element.classList.contains('klasse-die-geprüft-werden-soll').
 

lano

Mitglied
Du kannst auch speziell prüfen, ob es wirklich ein Element ist
cool. Hab das jetzt quasi so:
Javascript:
        lib.get = function(idOrElement) {
            if (idOrElement && 'string' === typeof idOrElement) {
                return document.getElementById(idOrElement);
            } else if (idOrElement && idOrElement instanceof Element) {
                    return idOrElement
            }
            return null;
        };
Zum Entfernen brauchst du aber nicht prüfen, ob sie existiert.
Ah OK. Dann schenke ich mir das.
 
  • Like
Reaktionen: asc

alinnert

Mitglied
Ja, das sieht sehr gut aus. Die Prüfung idOrElement && bräuchtest du auch nicht, weil die Prüfungen dahinter das bereits implizieren. Zu einem Fehler führt es auch nicht, da idOrElement immer deklariert ist (das ist hier der wichtige Punkt) und im schlimmsten Fall den Wert undefined hat, wodurch die Bedingungen immer false ergeben.
 
Oben Unten