16. Mai 2008
Manchmal scheint selbst jQuery zu einfach gestrickt zu sein, um die Lösung für naheliegende Aufgaben mitzubringen. jQuery erlaubt die Manipulation von Elementen auf Basis von Events. Ein Klick -> tu was, Hover in/out -> tu was anderes. Will man aber ein Element nur aufgrund seiner Anwesenheit im Layout modifizieren, fällt die Lösung nicht so leicht ins Auge.
Helfen kann man sich in diesem Fall mit $(selector).each(function(){ ... }); oder indem man per if ... then auf das gewünschte Element prüft. Gerade habe ich darüber mit David Maciejewski (Mr. Technikwürze) im Chat gequatscht und wenige Minuten später war seine knuffige Lösung fertig und gebloggt.
Die Anwendung ist dann ganz einfach ...
$('#meinDIv').found(function(){
alert('Ja, mich gibt es, stell was mit mir an.');
});
... schaut’s Euch mal an.
Freitag, 16.05.08 (14:05 Uhr)
Danke für die Tipps und das Spreading.
Freitag, 16.05.08 (15:47 Uhr)
Hm, vielleicht ist jQuery nicht zu einfach, sondern ihr denkt zu kompliziert? Oder versteh ich das Problem nicht?
Alles, was in einem $(document).ready() {} Block steht, kann unmittelbar ausgeführt werden.
$(’#meinDiv’).jQueryFunktion(“bla”, “blubb”);
#meinDiv muss in diesem Fall nicht mit einem Ereignis verknüpft werden.
Alle jQuery-Funktionen “arbeiten” auch auf dem leeren jQuery-Objekt. Wenn #meinDiv nicht im DOM existiert, gibts somit keinen Fehler, sondern es passiert einfach gar nichts.
Oder gehts darum, in Abhängigkeit von der Existenz eines DOM-Elements nicht-jQuery-Funktionalität auszuführen? In dem Fall reicht ein einfache Bedingung, die die length-Eigenschaft des jQuery-Objekts prüft:
if($(’#meinDiv’).length) {}
Freitag, 16.05.08 (15:49 Uhr)
yeah, smiley-power. die smileys sind einfach nur schließende klammern…
Freitag, 16.05.08 (16:56 Uhr)
@2meter3: Dein Beispiel passt nicht, denn du führst nur eine (!) Funktion aus. Ich möchte aber, dass du beliebig viele ausführen kannst, ohne dass ich dafür eine extra Funktion schreiben muss, also ähnlich wie es mit each() funktioniert. Die Lösung gibts ja auf meiner Seite.