Tim Tepaße: jQuery: DOM-Objekte um eigene Methoden erweitern

Beitrag lesen

Hallo,

Bei einem Projekt, bei dem das JS-Framework "jQuery" zum Einsatz kommt, möchte ich einem DOM-Element, nämlich einem Formular, eine selbstdefinierte Methode zuweisen.

Wenn ich mich recht erinnere und die nichts geändert haben, hat jQuery da eine recht merkwürdige Variante der Erweiterung: Man fügt Methoden, die man an DOM-Objekten sehen will in den Namensraum jQuery.fn.* ein.

~~~javascript jQuery.fn.doSomesthing = function () {
      alert("Yo!");
  };

  
sorgt also dafür, dass $() ein Objekt zurückgibt, das mit doSomething() (und den jQuery-Methoden) erweitert wurde und man $("foo").doSomething() machen kann. Der gravierende Nachteil ist natürlich, dass diese Funktionen unabhängig vom Element-Typ vorhanden sind.  
  
  

> $("form#foo").doSomething = function() {}  
> In diesem Fall ist $("form#foo").doSomething zu einem späteren Zeitpunkt undefined.  
  
Ohne nachgeforscht zu haben vermute ich einfach mal, dass das daran liegt, dass $() nicht die tatsächlichen DOM-Objekte zurückgibt, sondern ein Wrapperobjekt mit dem DOM-Element als Closure. Jedesmal, wenn Du $("form#foo") aufrufst, wird dieses Wrapperobjekt neu aus den DOM-Objekt und den jQuery.fn.\*-Funktionen zusammengebastelt – hat also nicht mehr die alte angefügte Funktion.  
  
(Muss ja auch ein Wrapperobjekt sein, schließlich selektiert $("div.foo") mehrere DOM-Objekte, $() kann aber zum Zwecke der Chainability nur ein Objekt zurückgeben, auf dem dann Methoden ausgeführt werden.)  
  
  

> Ich habe dazu aber in der Doku nichts gefunden.  
  
Vielleicht helfen Dir diese Abschnitte:  
• <http://docs.jquery.com/API/1.1.2/Core#.24.extend.28_prop_.29>  
• <http://docs.jquery.com/Plugins/Authoring>  
• <http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery#Plug_me:_Writing_your_own_plugins>  
  
  
Tim